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]
我并不是说这是有史以来最正确的决定,但它确实有效且易于理解。您可以通过此代码段和评论自行检查:
您可以通过简单的循环获取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);
}
假设我们有一个对象:
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]
我并不是说这是有史以来最正确的决定,但它确实有效且易于理解。您可以通过此代码段和评论自行检查:
您可以通过简单的循环获取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);
}