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

问题描述 投票:1回答:3

我正在尝试删除数组中的重复值对象,但不起作用...我认为重复功能正在起作用,但未反映在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
 }
angular typescript angular5 angular6 angular2-services
3个回答
2
投票

如果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
     )
  );
}

11
投票
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))
© www.soinside.com 2019 - 2024. All rights reserved.