Как удалить дубликат объекта из массива в угловых 6 - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь удалить дублирующиеся объекты-значения в массиве, но не работаю ... Я думаю, что дублирующаяся функция работает, но не отображается в списке 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
 }

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018
const result = Array.from(this.item.reduce((m, t) => m.set(t.name, t), new Map()).values());

Возможно, это решит вашу проблему.

0 голосов
/ 24 февраля 2019
this.item = this.item.filter((el, i, a) => i === a.indexOf(el))
0 голосов
/ 05 декабря 2018

Если 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
     )
  );
}
...