2016-07-12 3 views
1

у нас есть объект:Javascript: Как получить уникальный идентификатор для нескольких повторяющихся записей

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 имеет аналогичные значения для игрока и цены, но мне нужен только один идентификатор для аналогичных значений, то есть, вывод должен быть 202205 ,

+0

Вы хотите записи, которые соответствуют цене && игрока или цена матча или плеер и т.д .. – inoabrian

+0

я нужен один уникальный идентификатор записи, которые соответствуют как игрока и цену – TheDeveloper

ответ

1

Вы можете использовать reduce() для возврата объекта со счетом каждого Player|price. Затем вы можете использовать другое сокращение и проверить, есть ли число 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)

+0

Является ли их каким-либо образом, я могут заимствовать до одной записи каждый для повторяющихся значений? Подобно 202 и 203 имеет одинаковые значения, поэтому необходимо отобразить только один из них. – TheDeveloper

+0

Какой из них вы хотите использовать? –

+0

В приведенном выше примере, как 202 и 203 и 205 и 206 имеют схожие свойства, мне нужно только один из них. Выход: 202 и 205 – TheDeveloper

1
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

+0

Я немного изменил вопрос, как в примере 202 -203 и 205-206 имеет одинаковые значения, могу ли я получить только один из них, т.е. 203 и 205? – TheDeveloper

0

Вы можете получить идентификатор с простым циклом.

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); 
 
}

+0

Извините, но вы прочитали вопрос? Topicstarter запрашивает поиск специальных дубликатов, а затем возвращает их идентификаторы. –

Смежные вопросы