被问到如何给数组中对象去重,想到set答案肯定错误的,这个平时工作中用到的不多,查阅资料,找到给数组中对象去重的方法,利用对象属性名的唯一性,怪自己当时没想到。
方法一
let ary=[
{id: 0, name: "小明"},
{id: 1, name: "小张"},
{id: 2, name: "小李"},
{id: 3, name: "小孙"},
{id: 1, name: "小周"},
{id: 2, name: "小陈"},
];
var result = [];
var obj = {};
ary.forEach((ele,index)=>{
if(!obj[ele.id]){
result.push(ele);
obj[ele.id]=true;
}
});
//console.log(result)
方法二:用数组的reduce()方法(累加器)
redeuce()参数:回调函数,传递给函数初始值(可选)
回调函数的参数:
1:初始值, 或者计算结束后的返回值。
2:当前元素
3:当前元素的索引(可选)
4:当前元素所属的数组对象(可选)
let arys=[1,2,3];
//curs第一次为初始值1,之后为上一次累加结果3,
//next当前要累加得元素
var a=arys.reduce((curs,next)=>{
// console.log(next)
//1+2
//3+3
return curs+next;
});
//console.log(a);//6
利用redeuce()为数组中对象去重
let ary=[
{id: 0, name: "小明"},
{id: 1, name: "小张"},
{id: 2, name: "小李"},
{id: 3, name: "小孙"},
{id: 1, name: "小周"},
{id: 2, name: "小陈"},
];
let obj = {};
ary=ary.reduce((curs,next)=>{
obj[next.id]?"":obj[next.id]=true&& curs.push(next);
return curs;
},[]);
网友评论