我有一个对象数组:
[{
id: 1,
name: 'kitten'
}, {
id: 2,
name: 'kitten'
},{
id: 3,
name: 'cat
}]
如何移除第二只小猫?排序成一个名称数组不起作用,因为我不知道是否要删除id
1或id
2.所以,我不太清楚如何做到这一点。
答案 0 :(得分:1)
您可以使用额外的哈希映射来存储到目前为止找到的名称。处理下一个对象时,如果它的名称已经在哈希映射中,则它是重复的,您可以将其删除。
var duplicates = {};
for (var i = 0; i < array.length) {
var obj = array[i];
if (! duplicates[obj.name]) {
duplicates[obj.name] = 1;
i++;
} else {
array.splice(i, 1);
}
}
答案 1 :(得分:0)
有lodash库。 您可以使用uniq
var array = [{
id: 1,
name: 'kitten'
}, {
id: 2,
name: 'kitten'
},{
id: 3,
name: 'cat'
}];
var asd = _.uniq(array,'name');
console.log(asd);
给出一个输出:
[ { id: 1, name: 'kitten' }, { id: 3, name: 'cat' } ]
正如文档中所写“只保留每个元素的第一个出现”。
答案 2 :(得分:0)
var arr =[{
id: 1,
name: 'kitten'
}, {
id: 2,
name: 'kitten'
},{
id: 3,
name: 'cat'
}];
var results = [];
var idsSeen = {}, idSeenValue = {};
for (var i = 0, len = arr.length, name; i < len; ++i) {
name = arr[i].name;
if (idsSeen[name] !== idSeenValue) {
results.push(arr[i]);
idsSeen[name] = idSeenValue;
}
}
console.log(results);