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

相關文章
相關標籤/搜索