我需要从数组中删除重复项而不损害它们的顺序。请考虑这个数据数组
var array = [ { person: { amount: [1,1] } },
{ person: { amount: [1,1] } },
{ person: { amount: [2,1] } },
{ person: { amount: [1,2] } },
{ person: { amount: [1,2] } }];
Run Code Online (Sandbox Code Playgroud)
我知道它可以通过使用 new Set([iterable]) 来完成,但不能使用这个数组。如果有人有想法,请帮忙。提前致谢。
您可以将元素转换为 JSON 并将它们用作 Map 的键,然后将其转换回数组(现在使用 Nina Scholz 建议的更新):
var array = [
{ person: { amount: [1,1] } },
{ person: { amount: [1,1] } },
{ person: { amount: [2,1] } },
{ person: { amount: [1,2] } },
{ person: { amount: [1,2] } }
];
var result = [...new Map(array.map( o => [JSON.stringify(o), o])).values()];
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
Map 维护向其中添加项目的顺序,因此此过程不会更改原始顺序。
您也可以使用中间 Set 而不是 Map 来执行此操作,但是您需要从 JSON 重建对象,当您的对象中有一些与 JSON 不兼容的非关键属性(如函数)时,这会限制功能:
var result = Array.from(new Set(array.map( o => JSON.stringify(o))), s => JSON.parse(s));
Run Code Online (Sandbox Code Playgroud)