js高效数组去重

js性能最好的两种数组去重方式,第一种为ES6的new Set()方式。

let arr = [1, 2, 2, 3];
let set = new Set(arr);
let newArr = Array.from(set);
console.log(newArr); // [1, 2, 3]

new Set之后的数据之后,为一个set结构的类数组数据。



需要同样使用ES6的Array.from方法转换成真实数组。
但是这种方法,无法处理数组中的对象重复问题,例如这样的数据:

let person = [
     {id: 0, name: "小明"},
     {id: 1, name: "小张"},
     {id: 2, name: "小李"},
     {id: 3, name: "小孙"},
     {id: 1, name: "小周"},
     {id: 2, name: "小陈"},   
];

这时需要使用ES5的reduce方法实现数组去重。

arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。
最终实现方法如下:

let person = [
     {id: 0, name: "小明"},
     {id: 1, name: "小张"},
     {id: 2, name: "小李"},
     {id: 3, name: "小孙"},
     {id: 1, name: "小周"},
     {id: 2, name: "小陈"},   
];
let obj = {};
person = person.reduce((prev,cur) => {
    if(obj[cur.id] == undefined){
        obj[cur.id] = true && prev.push(cur);
    }
    return prev;
},[])
console.log(person);

初始化一个空数组,此时prev的值便为[],去上面声明的空对象obj中查找是否存在当前元素cur的id,当然是不存在的。之后便设置obj检查。



并且向计算对象中push当前对象cur。最后返回。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容