第
JS中6个对象数组去重的方法
目录前言方法一:使用.filter()和.findIndex()相结合的方法方法二:使用.reduce()方法方法三:使用.forEach()和.some()相结合的方法方法四:使用Map方法五:Object.create()方法六:Forconstof和find结合针对多个属性进行去重结束
前言
大家好,关于对象数组去重的业务场景,想必大家都遇到过类似的需求吧,针对这样的需求,你是怎么做的呢。
下面我就先和大家讨论下基于对象的某个属性如何去重。
方法一:使用.filter()和.findIndex()相结合的方法
使用filter()方法过滤掉重复的元素,使用findIndex()方法判断对象是否重复,代码如下:
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constuniqueArr=arr.filter((item,index)=
arr.findIndex(i=i.id===item.id)===index);
方法二:使用.reduce()方法
使用reduce()方法维护一个累加器,通过对象的属性来判断是否重复,代码如下:
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constuniqueArr=arr.reduce((acc,curr)={
if(!acc.find(item=item.id===curr.id)){
acc.push(curr);
returnacc;
},[]);
方法三:使用.forEach()和.some()相结合的方法
使用forEach()方法遍历数组,使用some()方法判断是否重复,代码如下:
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constuniqueArr=[];
arr.forEach(item={
if(!uniqueArr.some(i=i.id===item.id)){
uniqueArr.push(item);
});
方法四:使用Map
使用Map结构去重对象数组时,需要借助array.map()函数将对象数组进行转换,示例代码如下:
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constuniqueArr=[...newMap(arr.map(item=[item.id,item])).values()];
方法五:Object.create()
使用Object.create(),按照对象的属性来判断是否重复,代码如下
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constuniqueArr=arr.filter(function(item){
return!this[item.id](this[item.id]=true);
},Object.create(null));
方法六:Forconstof和find结合
这个方法的思想与方法3类似,其思路结构如下:
创建一个空的唯一数组来存储唯一对象。循环遍历数组中的对象。对于每个对象,如果它不是重复的,则将其添加到唯一数组。否则,忽略它
constarr=[{id:1,name:a},{id:2,name:b},
{id:1,name:c},{id:3,name:d}];
constunique=[];
for(constitemofarr){
constisDuplicate=unique.find((obj)=obj.id===item.id);
if(!isDuplicate