如何从打字稿数组中删除重复项? [重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

你能让我知道如何从类型脚本中的Array中删除重复项。

我的数组看起来像

a = [{a: 1, b: 2}, {a: 1, b: 2}, {c: 3, d: 4}]

我希望得到

a = [{a: 1, b: 2}, {c: 3, d: 4}]

我使用如下的Set数据结构

a = Array.from(new Set(a))

但仍然没用。请告诉我如何使用单个语句从数组中删除重复项?

javascript arrays
1个回答
2
投票

不是一个声明,而是简短。

var a = [{a: 1, b: 2}, {a: 1, b: 2}, {c: 3, d: 4}];
a = a.filter((value, index, array) => 
     !array.filter((v, i) => JSON.stringify(value) == JSON.stringify(v) && i < index).length);

console.log(a);
Your question sees like this:

Delete duplicated elements in array of objects Javascript

但是在评论中会失败:

var a = [{a: 1, b: 2}, {b: 2, a: 1}]; 

您需要为您的案例进行自定义比较:

function isEqual(a, b){
  for(var i in a)
       if(a[i] != b[i])
          return false;
  for(var i in b)
       if(b[i] != a[i])
          return false;
  return true;
}

var a = [{a: 1, b: 2}, {b: 2, a: 1}, {c: 3, d: 4}];
a = a.filter((value, index, array) => 
     !array.filter((v, i) => isEqual(value, v) && i < index).length);

console.log(a);

您可以比较ID或类似的东西来识别此示例中的相等对象我只是比较属性。

就像@Juan Mendes在评论中所说:

您的代码不过滤元素的原因是因为两个相似的对象仍被视为不同的对象,因为它们指向不同的对象。您需要编写自己的代码,使用自定义比较器。

© www.soinside.com 2019 - 2024. All rights reserved.