检查数组中的对象属性是否与具有相同ID的另一个对象重复

Check if an object property in an array is duplicate with another object of the same ID

本文关键字:ID 一个对象 数组 对象 属性 是否 检查      更新时间:2023-09-26

我有一个数组,类似于:

var arr = [
    {z: '1', val: 'duplicate'},
    {z: '1', val: 'duplicate'},
    {z: '2', val: 'test'},
    {z: '1', val: 'duplicate'},
    {z: '2', val: 'test2'}
];

我想要一个函数来确定具有相同id的对象的属性"val"是否有任何重复值。

因此,在这种情况下,函数将返回索引0、1和3是重复的。

一个简单的解决方案就是遍历数组并记录重复项。这是一个天真的解决方案。我相信你可以做得更好。

function dups(arr) {
  var map = {},
    result = [],
    el;
  
  // save map of all elements and record index of occurences
  for (var i = 0; i < arr.length; i++) {
    el = JSON.stringify(arr[i]);
    if (map[el]) {
      map[el].dups.push(i)
    } else {
      map[el] = {
        dups: [i]
      }
    }
  }
  
  // return array for elements with more than 1 occurence
  for (var key in map) {
    if (map[key].dups.length > 1) {
      result = result.concat(map[key].dups)
    }
  }
  return result
}

请注意,此解决方案不对每个对象中的键数或它们在数组中的顺序进行任何假设。