项目场景:
在一个数组里有若干个对象,
var arr = [
{name:'王',age:'22'},
{name:'李',age:'16'},
{name:'张',age:'55'},
{name:'郝',age:'45'},
{name:'赵',age:'33'},
{name:'王',age:'22'},
]
现在对数组 arr 进行去重
问题描述
首先我首先联想到的就是简单易写的ES5 new Set( );
代码如下:
var newarr = [...new Set(arr)];
console.log(newarr);
//[
// {name:'王',age:'22'},
// {name:'李',age:'16'},
// {name:'张',age:'55'},
// {name:'郝',age:'45'},
// {name:'赵',age:'33'},
// {name:'王',age:'22'},
//]
发现去重后 并没有生效
原因分析:
new Set() 只对数组内是基本类型适用 所以无法去重
解决方案:
1.利用reduce实现
let obj = {};
newarr = arr.reduce((cur,next) => { //next 每一项
obj[next.name] ? "" : obj[next.name] = true && cur.push(next);
return cur;
},[]) //设置cur默认类型为数组,并且初始值为空的数组
console.log(newarr);