我有一组对象,如下图所示。有没有一种方法可以让我的数组包含与 id 相关的唯一对象?我们可以在下面看到 id 在索引[0]和索引[2]处是相同的。
有没有办法让我可以获得一个包含唯一 id 的对象的数组,并将最后一个索引中的第一个对象添加到唯一数组而不是第一个宾语。在这种情况下,应该在索引[0]处添加索引为[2]的对象而不是对象:
答案 0 :(得分:1)
要获取特定案例的“唯一”对象数组(列表中的最后一个索引),请使用以下方法(Array.forEach
,Array.map
和Object.keys
函数):< / p>
// 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"
}
]
答案 1 :(得分:0)
执行此操作的最佳方法是将数据结构修改为对象本身,其中每个键都是ID之一:
{
"WadWA7WA6WAaWAdWA...": {
"text": "birla"
},
"WadWA...": {
"test": "ab"
}
}
等等。如果数据来自以这种方式格式化的源,您始终可以将结果数组映射到此格式。
答案 2 :(得分:0)
您可以使用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
(并且仅存储重复项的最后一个对象)
答案 3 :(得分:0)
试试这个:只需使用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应包含第二个和第三个对象。