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

时间:2015-02-09 06:35:25

标签: javascript jquery

我有一个像:

这样的数组
var arr = [
    {z: '1', val: 'duplicate'},
    {z: '1', val: 'duplicate'},
    {z: '2', val: 'test'},
    {z: '1', val: 'duplicate'},
    {z: '2', val: 'test2'}
];

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

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

1 个答案:

答案 0 :(得分:0)

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



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
}
&#13;
&#13;
&#13;

请注意,此解决方案不会对每个对象中的键数或其在数组中的顺序做出任何假设。