2015-02-09 46 views
0

我有这样的阵列的另一个目的重复:检查阵列中的对象属性是与相同的ID

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是重复的。

+3

拥有重复的ID会导致将其称为ID。 – 2015-02-09 06:38:56

+0

var sorted = arr.sort(); var results = [];对于(var i = 0; i Jango 2015-02-09 06:50:39

+0

是啊你是对的rahul无论如何在我的数据库它被称为别的只是试图简化它在这里。重命名它 – 2015-02-09 07:02:46

回答

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 
 
}

注意此解决方案不作出关于密钥的每个对象中的数量或它们的阵列中的次序的任何假设。

相关问题