繁体   English   中英

如何从javascript中的对象数组中获取唯一对象

[英]How to get unique objects from objects array in javascript

我有一组类似于下图的对象。 有没有办法让我可以拥有一个包含关于id 的唯一对象的数组? 我们可以在下面看到索引 [0] 和索引 [2] 处的id相同。

有没有一种方法可以让我得到一个包含具有唯一id 的对象的数组,并且将最后一个索引中的第一个对象添加到唯一数组而不是第一个对象中。 在这种情况下,应添加索引 [2] 处的对象而不是索引 [0] 处的对象: 在此处输入图片说明

要为您的特定情况获取“唯一”对象数组(具有列表中的最后一个索引),请使用以下方法( Array.forEachArray.mapObject.keys函数):

// exemplary array of objects (id 'WAew111' occurs twice)
var arr = [{id: 'WAew111', text: "first"}, {id: 'WAew222', text: "b"}, {id: 'WAew111', text: "last"}, {id: 'WAew33', text: "c"}],
    obj = {}, new_arr = [];

// in the end the last unique object will be considered
arr.forEach(function(v){
    obj[v['id']] = v;
});
new_arr = Object.keys(obj).map(function(id) { return obj[id]; });

console.log(JSON.stringify(new_arr, 0, 4));

输出:

[
    {
        "id": "WAew111",
        "text": "last"
    },
    {
        "id": "WAew222",
        "text": "b"
    },
    {
        "id": "WAew33",
        "text": "c"
    }
]

最好的方法是将您的数据结构修改为一个对象本身,其中每个键都是 ID 之一:

{
    "WadWA7WA6WAaWAdWA...": {
        "text": "birla"
    },
    "WadWA...": {
        "test": "ab"
    }
}

等等。 如果数据来自以这种方式格式化的源,您总是可以将结果数组映射到这种格式。

您可以使用 id 作为键创建一个散列并将值保留为整个对象:

var myHash = new Object();
var i;

for(i = 0; i < yourArray.length; i++) {
    var yourObjId = yourArray[i][id];
    myHash[yourObjId] = yourArray[i];
}

您将得到一个包含具有唯一 ID 的对象的哈希myHash (并且只会存储重复的最后一个对象)

试试这个:只需使用 id 作为键添加到一个新对象

var arr = [{id:'123', text: 'a'}, {id:'234', text: 'b'}, {id:'123', text: 'c'}]; 
var map = new Object();
for(var i in arr){ map[arr[i].id] = arr[i]; }
var newArr = [];
for(var i in map){ newArr.push(map[i]); }

newArr 应包含第二个和第三个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM