关于数组去重的问题

先来看两种解法:

//es6解法
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
console.info([...new Set(arr)])
//es5解法
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
const res = []
for(let i = 0; i < arr.length; res.indexOf(arr[i++]) === -1 && res.push(arr[i - 1]));
console.info(res)

扩展运算符 ... 是把数组或类数组对象展开成一系列用逗号隔开的值。ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值,set内部可用for...of...遍历。Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。例如:var set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4]

//第二种写法实际上是:
const arr = [1, 1, 2, 3, 4, 4, 5, 5]
const res = []
for(let i = 0; i < arr.length; i++){
    res.indexOf(arr[i]) === -1 && res.push(arr[i])
};
console.info(res)

三个注意点:res.indexOf(arr[i++]) === -1 实际上是先判断是否等于 -1 然后 i 再自增 1 的。&&运算符从左往右依次判断,当当前值为true则继续,为false则返回此值(是返回未转换为布尔值时的原值)。res.push(arr[i - 1])里的 i 实际上实际上已经是自增 1 以后的了。

你可能感兴趣的:(关于数组去重的问题)