从JS数组中删除重复项
removing duplicates from JS array
我有以下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?
实际上,我们可以非常简单地完成这项工作,只需在其上循环即可。对于每个项,将其在新数组中的位置分配给其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));
试试这个:
items = items.reverse().filter((function() {
var existing = {};
return function(item) {
if(existing[item.id]) {
return false;
}
existing[item.id] = true;
return item;
}
}()));
这应该可以实现您想要的:
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));
如果使用下划线,它将只是
_.uniq(items.reverse(), function(i1, i2) { return i1.id === i2.id; }))
通常情况下,_.uniq
会删除相同的项,但我们可以将第二个参数传递给它,该参数指定一个函数,用于确定是否将两个项视为相同。
需要items.reverse()
,因为OP似乎希望最后一项优先。
相关文章:
- addData()从最新图表中删除.js 2.1.3-怎么了
- 删除JS数组中的最小数字
- 如何删除↵JS字符串中的字符
- 正则表达式用于删除 js 中的 css 规则
- 从给定第一个的另一个对象中删除JS对象(行)
- 如何动态添加和删除 js 文件
- 删除 js 数组中的 html 元素的最佳方法
- 如何在 mvc3 Web 应用程序的生产版本中删除 JS 日志记录调用
- 如何使用 PHP 删除 JS 注释
- 如何在完全加载之前从一个页面中删除 js 文件
- 如何从新的空 MVC 项目中删除 js 脚本
- 如何在鼠标退出时删除 JS 悬停功能
- 如何删除JS中参数指定的数组中的元素
- 如何从这个数据结构中删除js数组中的数据
- jQuery:如何在运行时插入或删除.js文件
- 是否有一种方法可以删除JS库中未使用的行
- 如何从字符串中删除html标签,而不删除Js中的特定标签
- 删除JS字符串中连续的竖条
- 从页面中删除js代码
- 删除JS选项卡,切换活动