首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从JS数组中删除重复项

从JS数组中删除重复项
EN

Stack Overflow用户
提问于 2014-09-30 10:22:35
回答 4查看 247关注 0票数 3

我有以下JS数组:

代码语言:javascript
运行
复制
var items=[
    { id: 1, name: 'aa' },
    { id: 1, name: 'bb' },
    { id: 2, name: 'cc' },
    { id: 1, name: 'dd' }
];

我想把它转换成以下内容。

代码语言:javascript
运行
复制
var items=[
    { id: 1, name: 'dd' },
    { id: 2, name: 'cc' }
];

我应该如何使用JavaScript来实现它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-30 10:27:33

我们实际上可以很简单地做这件事,只要绕一圈就行了。对于每一项,在与其ID对应的新数组中分配其位置。先前的ID会被覆盖,因此只有最后一个被保存。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-09-30 10:41:02

试试这个:

代码语言:javascript
运行
复制
items = items.reverse().filter((function() {
    var existing = {};
    return function(item) {
        if(existing[item.id]) {
            return false;
        }
        existing[item.id] = true;
        return item;
    }
}()));
票数 0
EN

Stack Overflow用户

发布于 2014-09-30 10:47:42

这应该是你想做的事:

代码语言:javascript
运行
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26118418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档