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()
⾼⼿给的,完美⽅法
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 = duce((cur,next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
return cur;
},[]) //设置cur默认类型为数组,并且初始值为空的数组
filter过滤对象数组
log(person);
⾼⼿总结:
使⽤时发现开 eslint 时,上⾯的表达式会报错,换成以下条件即可:
let obj = {};
person = duce((cur,next) => {
if (!obj[next.id]) {
obj[next.id] = true
if (!obj[next.id]) {
cur.push(next)
}
} // 不会报错,也⽐较好懂了(当对象⾥没有所传属性时,给属性true并PUSH数组)
return cur;
},[])
.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。