2015-02-09 44 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 
 
}

注意此解決方案不作出關於密鑰的每個對象中的數量或它們的陣列中的次序的任何假設。

相關問題