注意:本文中的 arr 为任意一个数组
1
arr = arr.filter((value, index) => index === arr.indexOf(value));
解释:
fliter 方法应用于数组的每一个元素,根据回调函数来决定数组元素是否保留,最后返回一个新数组。
箭头函数左边为参数,右边为返回值。第一个参数为当前遍历到的元素的值,第二个参数为元素在数组中的索引值。
indexOf 方法返回给定元素在数组中的第一个索引,如果给定元素不存在则返回 -1。
在上方代码中,如果当前遍历到的元素的索引与数组中查询该元素的第一个索引相等,就会保留当前元素。否则就是在第一个元素后出现了数值相等的重复元素,不保存重复元素。
2
arr = [...new Set(arr)];
解释:
Set 允许存储任何类型的唯一值。构造 Set 时允许传入一个可迭代对象,如数组。因为 Set 中的值具有唯一性,所以新的 Set 对象中只保留数组不重复的值。
… 为扩展语法,可以使迭代对象变为逗号分隔的多个值。
上方代码中新建的 Set 对象没有重复值,展开后变为了逗号分隔的一列参数,加上外面的方括号就又变为了数组。