我有以下JS数组:
var items=[
{ id: 1, name: 'aa' },
{ id: 1, name: 'bb' },
{ id: 2, name: 'cc' },
{ id: 1, name: 'dd' }
];
我想把它转换成以下内容。
var items=[
{ id: 1, name: 'dd' },
{ id: 2, name: 'cc' }
];
我应该如何使用JavaScript?
答案 0 :(得分:1)
我们实际上可以非常简单地做到这一点,只是循环它。对于每个项目,将其位置分配给与其ID对应的新数组。早期的ID会被覆盖,因此只保存最后一个ID。
var items=[
{ id: 1, name: 'aa' },
{ id: 1, name: 'bb' },
{ id: 2, name: 'cc' },
{ id: 1, name: 'dd' }
], newItems = [];
for (var i =0;i<items.length;i++){
newItems[items[i].id - 1] = items[i];
}
alert(JSON.stringify(newItems));
答案 1 :(得分:0)
试试这个:
items = items.reverse().filter((function() {
var existing = {};
return function(item) {
if(existing[item.id]) {
return false;
}
existing[item.id] = true;
return item;
}
}()));
答案 2 :(得分:0)
这应该做你想要的:
var items = [
{ id: 1, name: 'aa' },
{ id: 1, name: 'bb' },
{ id: 2, name: 'cc' },
{ id: 1, name: 'dd' }
];
function removeDupIds(items){
var result = [],
uniqIds = {},
i = 0,
l = items.length;
for(; i<l; i++){
uniqIds[items[i].id] = items[i].name;
}
for(var k in uniqIds){
result.push({id: k, name: uniqIds[k]});
}
return result;
}
console.log(removeDupIds(items));
答案 3 :(得分:0)
使用下划线,它只是
_.uniq(items.reverse(), function(i1, i2) { return i1.id === i2.id; }))
通常_.uniq
删除相同的项目,但我们可以传递第二个参数,指定一个函数来确定两个项目是否会被认为是相同的。
需要items.reverse()
,因为OP似乎希望最终项目具有优先权。