JS 数组中对象去重 reduce 用法

[3,2,6].reduce.((aa, bb) => {return aa+bb}, []) // 注意传了2个参数,第一个为回调,第二个为初始值 aa

单纯数组去重:
let arr = new Set([1,1,3,3,'bb','bb','cc'])
[...arr] // 打印出 1, 3, "bb", "cc"

对于数组对象,传统的去重方法无能为力,至于forEach()、filter()等迭代方法也很差使;真正能作到优雅去重的,是ES5新增长的一个方法——reduce()html

高手给的,完美方法数组

let log = console.log.bind(console);
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((cur,next) => {
    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
    return cur;
},[]) //设置cur默认类型为数组,而且初始值为空的数组
log(person);

高手总结:http://www.javashuo.com/article/p-ehndleel-ck.htmlide

 

使用时发现开 eslint 时,上面的表达式会报错,换成如下条件便可:spa

let obj = {};
person = person.reduce((cur,next) => {
    if (!obj[next.id]) {
      obj[next.id] = true
       if (!obj[next.id]) {
        cur.push(next)
       }
    } // 不会报错,也比较好懂了 (当对象里没有所传属性时,给属性true并PUSH数组)
    return cur; },[])  

 

 

 

.eslint

相关文章
相关标签/搜索