利用 filter
的第三个参数 --- 整个数组, 查找数组内当前元素的索引
- 如果索引匹配, 就是第一次出现
- 如果索引不匹配, 是重复的, 就过滤掉
const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]
const arr2 = arr.filter((item, index, self) => index === self.indexOf(item))
// [1, 2, 4, 5, 3]
利用对象属性查找
- 不存在, 就创建一个键值对
- 存在, 则跳过
最后调用 Object.keys 方法取出所有的键名, 展开
const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]
const obj = {}
for (let i = 0; i < arr1.length; i++) {
if(obj.hasOwnProperty(arr1[i])){
continue
}
obj[arr1[i]]=i
}
const arr2 = [...Object.keys(obj)]
利用集合天生的互异性去重 传递一个数组, 经过 Set 集合转化后, 展开
const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]
const arr2 = [...new Set([...arr1])]
先将数组从小到大排列, 通过比较大小决定是否要插入到 ret 数组中
const arr1 = [1, 2, 2, 4, 5, 3, 2, 4, 3]
function noRepeat(arr) {
arr.sort((a, b) => a - b)
const ret = [arr[0]]
for (let i = 1; i < arr.length; i++) {
ret.slice(-1)[0] !== arr[i] && ret.push(arr[i])
}
return ret
}