如何在Javascript中按字段删除数组中的重复对象?

时间:2015-06-16 11:05:24

标签: javascript arrays sorting object

我有一个对象数组:

[{
  id: 1,
  name: 'kitten'
}, {
  id: 2,
  name: 'kitten'
},{
  id: 3,
  name: 'cat
}]

如何移除第二只小猫?排序成一个名称数组不起作用,因为我不知道是否要删除id 1或id 2.所以,我不太清楚如何做到这一点。

3 个答案:

答案 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);