2016-12-01 9 views
1

我有一個包含對象具有這種結構的數組:檢查對象數組中的兩次存在

var results = [{ 
    AuthorId: 2, 
    Id: 89, 
    caseId: 33 //some key 
},...]; 

現在,我要檢查是否存在2次以上此陣列中的對象和記錄他們控制檯。

我的方法:

$.each(results, function (i, result) { 
    var stringRes = result.AuthorId + ";" + result.caseId; 
    $.each(results, function (j, toTest) { 
     if (j <= results.length - 2) { 
      var stringToTest = results[j + 1].AuthorId + ";" + results[j + 1].caseId; 
      if (stringToTest == stringRes) { 
       console.log(result.Id); 
       //some function to do something with duplicates 
      } 
     } 
    }); 
}); 

首先,我知道做串並比較它們是不是真的好。其次,這將記錄每個項目至少一次,因爲每個項目相互比較(=項目比較自己)。

這是可以通過(或多或少)快速可靠的方式修復嗎?

回答

0

您可以使用散列表或地圖進行計數。如果計數是2或更大,則做出某些事情。作爲關鍵,我建議使用字符串化對象,如果對象始終具有相同的結構。

var results = [{ AuthorId: 2, Id: 89, caseId: 33 }, { AuthorId: 2, Id: 89, caseId: 33 }], 
 
    hash = Object.create(null); 
 

 
results.forEach(function (a) { 
 
    var key = JSON.stringify(a); 
 
    hash[key] = (hash[key] || 0) + 1; 
 
    if (hash[key] >= 2) { 
 
     console.log('count of 2 or more of ' + key); 
 
    } 
 
});

+0

好主意。工作但記錄了一些值兩次。 – sandrooco

+0

你可以添加一些更多的數據來測試。 –

+0

經過2300件測試。 :) – sandrooco

相關問題