从数组中删除重复的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从数组中删除重复的对象相关的知识,希望对你有一定的参考价值。

参考技术A 假设我们有一系列对象,例如:

我们想要从数组中删除这些重复的对象,我们该如何解决?

为了理解原因,让我们先来看看如何从平面项数组(如字符串)中删除重复项。

假设我们有一个字符串数组,如下所示:

如果我们想从这个数组中删除任何重复项,我们可以使用 Array.prototype.filter() 和 String.prototype.indexOf() 方法来检查任何给定项是否是重复项。

这种方法不适用于对象的原因是,任何两个具有相同属性和值的对象实际上并不被认为是相同的。

具有 name 和 age 相同,但进行比较时确为 false , 这是因为对象是基于引用而不是结构进行比较的。在比较这两个对象时,不考虑这两个对象具有相同的属性和值。因此,在一个对象数组中,即使存在另一个具有完全相同的属性和值的对象,也总是返回所传递对象的索引。

检查两个对象是否具有相同的属性和值的唯一方法是实际检查每个对象的属性和值。

以下该解决方案涉及到执行这个手动检查,但是有一些增强来提高性能和减少不必要的嵌套循环。

如何从角度6中的数组中删除重复对象

【中文标题】如何从角度6中的数组中删除重复对象【英文标题】:How to remove duplicate object from an array in angular 6 【发布时间】:2019-05-07 07:47:55 【问题描述】:

我正在尝试删除数组中的重复值对象但不工作...我认为重复函数工作但没有反映在li 列表中。你能找出我必须改变的地方吗?

我的服务文件:

 addComp(Names,c)   
 this.item.push( name: Names, componentid: c);
 this.uniqueArray = this.removeDuplicates(this.item, "name"); //this line issue
 this.item=this.uniqueArray; //this line issue
 

【问题讨论】:

【参考方案1】:
const result = Array.from(this.item.reduce((m, t) => m.set(t.name, t), new Map()).values());

这可能会解决您的问题。

【讨论】:

【参考方案2】:
this.item = this.item.filter((el, i, a) => i === a.indexOf(el))

【讨论】:

【参考方案3】:

如果addComp 是您修改this.item 的唯一位置,则只需在插入之前检查是否存在。重复项永远不会放入数组中,因此您永远不必修剪它们。

addComp(Names,c)
  let item = name: Names, componentid: c;
  if (this.item.find((test) => test.name === Names) === undefined) 
    this.item.push(item);
  

或者,如果您正在修改其他位置this.item,您应该在更预期的位置剥离重复项。将它们作为addComp 函数的副作用剥离是出乎意料的。但是,你可以做到...

addComp(Names,c)
  this.item.push(name: Names, componentid: c);
  this.item = this.item.filter((test, index, array) =>
     index === array.findIndex((findTest) =>
        findTest.name === test.name
     )
  );

【讨论】:

谢谢..工作正常 我有一些关于 Angular 6 的问题。你能回答我吗?【参考方案4】:

这将删除this.item中的现有重复项

const item = [...new Set(this.item)];

这是一种更新的方法。这将在插入之前检查是否存在。如果item 不在this.item 中,那么this.item.indexOf(item) = -1

这是防止将重复值对象推入数组的最佳方法

addComp(Names,c)
  let item = name: Names, componentid: c;
  if (this.item.indexOf(item) === -1) 
    this.item.push(item);
  

【讨论】:

【参考方案5】:

这将修复错误

const uniqueObjectArray = [...new Map(arrayOfObjectsWithDuplicates.map(item => [item[key], item])).values()]

【讨论】:

以上是关于从数组中删除重复的对象的主要内容,如果未能解决你的问题,请参考以下文章

从对象数组中删除第二次出现的对象[重复]

从对象数组中的嵌套数组中删除重复项

如何从角度6中的数组中删除重复对象

从Mongoose的数组中删除一个对象[重复]

从数组中的 JSON 对象中删除属性 [重复]

Coffeescript / Node.js:如何从对象数组中删除重复对象?