ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
下面我们就利用set的这一特性实现数组的去重。
一.简单数组去重
- 将数组转成set类型,实现去重
- 将set类型转成Array类型
将set类型转成普通数组的方法:
1.扩展运算符[...set]
2.Array.from(set)
let list = [1, 2, 3, 4, 5, 2, 499, 155, 66, 72, 666, 5, 2, 5, 6, 5, 55, 15, 56, 24, 5, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
let set = new Set(list)
let newlist = [...set]//Array.from(set)
//[1, 2, 3, 4, 5, 499, 155, 66, 72, 666, 6, 55, 15, 56, 24]
console.log(newlist);
console.log(Array.from(set));
二、复杂数组去重
let list = [1, 2, 2, "kerwin", "kerwin", [1, 23, [3.4], [1, 2], 3, { name: "kerwin" }, { age: 100 }, { name: "kerwin" }], undefined, undefined, NaN, NaN]
function uni(arr) {
let res = new Set()
return arr.filter(item => {
let id = JSON.stringify(item)
//判断has trun false
//没有return true
if (res.has(id)) {
return false
} else {
res.add(id)
return true
}
})
}
console.log(uni(list))