Javascript:如何获取多个重复记录的唯一ID

Javascript : How to get unique Id for multiple duplicate records

假设我们有一个对象:

   var db = [
        {Id: "201" , Player: "Jon",price: "3.99", loc: "NJ" },
        {Id: "202", Player: "Sam",price: "4.22", loc: "PA" },
        {Id: "203" ,Player: "Sam",price: "4.22", loc: "NY" },
        {Id: "204", Player: "Bill",price: "3.22", loc: "TX" },
        {Id: "205" ,Player: "Dave",price: "3.99", loc: "WA" },
        {Id: "206" ,Player: "Dave",price: "3.99", loc: "WI" },
];

202,203,205,206 具有相似的播放器和价格值,但我只需要一个 ID 来表示相似的值,即输出应为 202,205。

您可以先使用 reduce() 到 return 对象,每个 Player|price 组合的计数。然后你可以使用另一个reduce,并检查Player|price number if > 1 是否计数。如果是,则将对象 id 添加到数组。

var db = [
   {Id: "201" ,Player: "Jon",price: "3.99", loc: "NJ" },
   {Id: "202", Player: "Sam",price: "4.22", loc: "PA" },
   {Id: "203" ,Player: "Sam",price: "4.22", loc: "NY" },
   {Id: "204", Player: "Bill",price: "3.22", loc: "TX" },
   {Id: "205" ,Player: "Dave",price: "3.99", loc: "WA" },
   {Id: "206" ,Player: "Dave",price: "3.99", loc: "WI" },
];

var obj = db.reduce(function(o, e) {
  o[e.Player + '|' + e.price] = (o[e.Player + '|' + e.price] || 0) + 1;
    return o;
}, {});

var result = db.reduce(function(r, e) {
  if(obj[e.Player + '|' + e.price] > 1) r.push(e.Id);
    return r;
}, []);

console.log(result)

var result = []; 

db.forEach(function(item, index){  
   db.forEach(function(item2, index2){ 
      if (index == index2) return;
      if (item.Player == item2.Player && item.price == item2.price) {   
         if(result.indexOf(item.Id) < 0){  
           result.push(item.Id);
         }
         if(result.indexOf(item2.Id) < 0){
           result.push(item2.Id);
         }
      }
   });
});

console.log(result); // [202,203,205,206]

我并不是说这是有史以来最正确的决定,但它确实有效且易于理解。您可以通过此代码段和评论自行检查:

https://codepen.io/anon/pen/vKWZKx

您可以通过简单的循环获取ID。

var db = [
        {Id: "201" , Player: "Jon",price: "3.99", loc: "NJ" },
        {Id: "202", Player: "Sam",price: "4.22", loc: "PA" },
        {Id: "203" ,Player: "Sam",price: "4.22", loc: "NY" },
        {Id: "204", Player: "Bill",price: "3.22", loc: "TX" },
        {Id: "205" ,Player: "Dave",price: "3.99", loc: "WA" },
        {Id: "206" ,Player: "Dave",price: "3.99", loc: "WI" },
];

for(var i = 0; i < db.length; i++){
  var obj = db[i];
  console.log('Id: ', obj.Id);
}