初始化数据结构如下:
oldarr=[ {id:0001, name:'user1'}, {id:0003, name:'user2'}, {id:0002, name:'user1'}, {id:0003, name:'user2'} ]
根据数组元素对象中name属性来为数组去重
function arrRemoveRepet(oldarr) {
let newArr = [];
const obj = {};
newArr = oldarr.reduce(function(prev, cur) {
obj[cur.name] ? '' : (obj[cur.name] = true && prev.push(cur));
return prev;
}, []);
return newArr;
}
//返回结果为 [ {id:0001, name:'user1'}, {id:0003, name:'user2'} ]
obj 对象中存储的必须是键值对(这样容易判断对象里面有没有这个键),所以对象obj的键cur.name
必须对应一个值,这个值逻辑判断必须为 true
obj[cur.name] = 2 // 也是可以的
如果不给
obj[cur.name]
赋 true 值,就变成了字符串和键值对的对比,结果永远是false
引用一个通俗的解释
https://zhidao.baidu.com/question/2117374649677753947.html
试试赋值为 null 的结果
网友评论