你能告诉我如何从类型脚本中的数组中删除重复项吗?
我的阵列看起来像
a = [{a: 1, b: 2}, {a: 1, b: 2}, {c: 3, d: 4}]
Run Code Online (Sandbox Code Playgroud)
我正在寻找
a = [{a: 1, b: 2}, {c: 3, d: 4}]
Run Code Online (Sandbox Code Playgroud)
我使用了如下设置数据结构
a = Array.from(new Set(a))
Run Code Online (Sandbox Code Playgroud)
但还是没有用。请让我知道如何使用单个语句从数组中删除重复项?
不是在一个单一的声明中,而是简短的。
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);Run Code Online (Sandbox Code Playgroud)
但就像在评论中会失败:
var a = [{a: 1, b: 2}, {b: 2, a: 1}];
Run Code Online (Sandbox Code Playgroud)
您需要为您的案例进行自定义比较:
var a = [{a: 1, b: 2}, {b: 2, a: 1}];
Run Code Online (Sandbox Code Playgroud)
您可以比较 ids 或类似的东西来识别此示例中的相同对象,我只是比较属性。
就像@Juan Mendes 在评论中所说:
您的代码不过滤元素的原因是两个相似的对象仍然被视为不同的对象,因为它们指向不同的对象。您需要编写自己的使用自定义比较器的代码。