【问题标题】:Javascript : How to get unique Id for multiple duplicate recordsJavascript:如何获取多个重复记录的唯一 ID
【发布时间】:2016-11-15 02:54:12
【问题描述】:

假设我们有一个对象:

   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。

【问题讨论】:

  • 你想要匹配价格&&播放器或匹配价格或播放器等的记录。
  • 我需要一个唯一的 ID 用于匹配玩家和价格的记录

标签: javascript object duplicates distinct-values


【解决方案1】:

您可以先使用reduce() 来返回具有每个Player|price 组合计数的对象。然后您可以使用另一个reduce,并检查Player|price 的计数是否为> 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)

【讨论】:

  • 他们有什么办法,我可以借用一条记录来记录重复值吗?就像 202 和 203 具有相同的值,所以只需要显示其中一个
  • 你想用哪一个?
  • 在上面的例子中,因为 202&203 和 205&206 有相似的属性,我只需要一个。输出:202 和 205
  • 这是另一个问题,所以这个答案和其他答案适用于您的原始问题,但您可以这样做jsfiddle.net/Lg0wyt9u/1027
【解决方案2】:
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]

我并不是说这是有史以来最正确的决定,但它足够有效且易于理解。您可以通过这个带有 cmets 的 sn-p 自行检查:

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

【讨论】:

  • 我稍微编辑了问题,因为在示例中 202 -203 和 205-206 具有相似的值,我可以只得到一个,即 203 和 205 吗?
【解决方案3】:

您可以通过简单的循环获取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);
}

【讨论】:

  • 抱歉,您是否阅读了问题? Topicstarter 要求查找特殊的重复项,然后返回它们的 ID。
猜你喜欢
  • 2012-09-28
  • 2019-03-20
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多