基本信息
文件名称:JS中6个对象数组去重的方法.docx
文件大小:16.68 KB
总页数:4 页
更新时间:2025-05-21
总字数:约2.92千字
文档摘要

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