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

时间:2017-12-15 21:27:00

标签: javascript arrays

您能告诉我如何从类型脚本中删除数组中的重复项。

我的数组看起来像

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

我希望得到

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

我使用了如下面的Set data strucure

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

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

1 个答案:

答案 0 :(得分: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);
你的问题是这样的:

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);

你可以比较像这样的ids或somenthing来识别这个样本中的相等对象我只是比较属性。

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

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