die*_*nez 0 javascript arrays typescript ecmascript-6 ionic-framework
我有这个数组:
array = [{id: 1, name: 'apple'}, {id: 2, name: 'banana'}, {id: 3, name:
'apple'}]
Run Code Online (Sandbox Code Playgroud)
我需要删除具有重复属性“名称”的对象,并且需要为其余对象保留最高的ID,如下所示:
newarray = [ {id: 2, name: 'banana'}, {id: 3, name: apple}]
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这种方式:
array = [{id: 1, name: 'apple'}, {id: 2, name: 'banana'}, {id: 3, name:
apple}]
newarray = Array.from(new Set(array.map(x => x.id)))
.map(id => {
return {
id: id,
name: array.find( s => s.id === id).name
})
Run Code Online (Sandbox Code Playgroud)
结果我得到
newarray = [ {id: 2, name: 'banana'}, {id: 1, name: apple}]
Run Code Online (Sandbox Code Playgroud)
我删除了重复的对象,但是我没有为每个剩余的对象获得最高的ID。
谢谢你给我一个主意。
我会reduce改用-简化为按名称索引的对象,其值是关联的id/ name对象。如果对象已经存在给定名称,则仅当新对象的ID较高时才重新分配:
const array = [{id: 1, name: 'apple'}, {id: 2, name: 'banana'}, {id: 3, name:
'apple'}];
const newArray = Object.values(
array.reduce((a, item) => {
const { name } = item;
if (!a[name] || a[name].id < item.id) {
a[name] = item;
}
return a;
}, {})
);
console.log(newArray);Run Code Online (Sandbox Code Playgroud)