[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