我想删除对象数组中的重复项,具体取决于对象属性。
简化示例: 假设您有一个类似的数组:
[
{
name: 'alice',
something: 123
},
{
name: 'alice',
something: 321
},
{
name: 'bob',
something: 213
}
]
我想删除name
具有相同值的对象,但是我想通过一些自定义计算确定要删除的对象(例如,保持对象具有更大的值something
)。
我能够在 find duplicate values in a JavaScript array中调整已接受的答案,但是对于超过2个重复项,这种方法效果不佳。
答案 0 :(得分:1)
您可以尝试使用reduce和object,根据您的条件设置属性。
然后通过Object.values将其转换为数组。
var arr = [
{
name: 'alice',
something: 123
},
{
name: 'alice',
something: 321
},
{
name: 'bob',
something: 213
}
];
var res = arr.reduce( (acc,b) => {
if ((acc[b.name] && acc[b.name].something < b.something) || !acc[b.name]) {
acc[b.name] = b;
}
return acc;
}, {});
var newArr = Object.values(res);
console.log(newArr);
&#13;
答案 1 :(得分:1)
您可以使用哈希表作为对相同名称对象的引用。
var array = [{ name: 'alice',something: 123 }, { name: 'alice', something: 321 }, { name: 'bob', something: 213 }],
result = array.reduce(function (hash) {
return function (r, a) {
if (!(a.name in hash)) {
hash[a.name] = r.push(a) - 1;
return r;
}
if (r[hash[a.name]].something < a.something) {
r[hash[a.name]] = a;
}
return r;
};
}(Object.create(null)), []);
console.log(result)