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

How do I remove duplicate objects in an array by field in Javascript?

本文关键字:数组 对象 删除 字段 Javascript      更新时间:2023-09-26

我有一个对象数组:

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

如何移除第二只小猫?对名称数组进行排序不起作用,因为我不知道我是否要删除id 1 或id 2。所以,我不太确定该怎么做。

您可以使用额外的哈希映射来存储到目前为止找到的名称。当您处理下一个对象时,如果它的名称已经在哈希映射中,则它是重复的,您可以将其删除。

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);
    }
}

有 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' } ]

正如文档中所写的那样,"只保留每个元素的第一次出现"。

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