Javascript 通过比较共享值2的元素的值1,从数组中删除对象

Javascript 通过比较共享值2的元素的值1,从数组中删除对象,javascript,jquery,Javascript,Jquery,我在一个数组中有许多对象。我希望获取具有相同“id”的任何对象,并将“num”值与该相同“id”的其他“num”值进行比较。我希望将整个对象数组减少为每个id只有最高数量的对象数组。这些对象可以复制,但任何少于最高数量的对象都应该删除。所有其他键/值对也应该在创建的最终对象数组中出现 { random : ajabl, num : 5, // should stay, highest number is 5 id :10 } { random: jlsl, num : 4,

我在一个数组中有许多对象。我希望获取具有相同“id”的任何对象,并将“num”值与该相同“id”的其他“num”值进行比较。我希望将整个对象数组减少为每个id只有最高数量的对象数组。这些对象可以复制,但任何少于最高数量的对象都应该删除。所有其他键/值对也应该在创建的最终对象数组中出现

{
  random : ajabl,
  num : 5, // should stay, highest number is 5
  id :10
}
{
  random: jlsl,
  num : 4, // should go, highest number is 5
  id : 10 
}
{
  random: jlssssl,
  num : 5, // should stay, highest number is 5
  id : 10
}
{ 
  random: abcd,
  num : 1, // should go, highest number is 5
  id : 10
}
{
  random : xy45,
  num : 2, // Should stay, highest number is 2
  id : 11
}

我相信有更好的方法可以做到这一点,但嘿,这只是一个开始:)

var列表=[
{
num:5,//应该保留,最大值为5
身份证号码:10
},
{
num:4,//应该走,最大的数字是5
身份证号码:10
},
{
num:5,//应该保留,最大值为5
身份证号码:10
},
{ 
num:1,//应为0,最大值为5
身份证号码:10
},
{
num:2,//应保留,最大值为2
身份证号码:11
}
]
让结果=[]
用于(列表的obj){
让resultItem=result.find(item=>item.id==obj.id)
if(resultItem==null){
//首次出现此id时,请保留它
结果推送(obj)
}否则{
//仅当它大于或等于现有num时才保留它
if(obj.num>=resultItem.num){
结果推送(obj)
//删除以前的
result=result.filter(item=>item.id!=obj.id | | item.num==obj.num)
}
}
}
console.log(结果)
var a=[
{
num:5,//应该保留,最大值为5
身份证号码:10
},
{
num:4,//应该走,最大的数字是5
身份证号码:10
},
{
num:5,//应该保留,最大值为5
身份证号码:10
},
{
num:1,//应为0,最大值为5
身份证号码:10
},
{
num:2,//应保留,最大值为2
身份证号码:11
}
];
var d=a.减少((c,b)=>{
如果(!c[b[“id”]){
c[b[“id”]=b[“num”];
}否则{
如果(c[b[“id”]控制台日志(e)我认为您可以通过以下方式使用ES6实现:

让arr=[{
num:5,//应该保留,最大值为5
身份证号码:10
},
{
num:4,//应该走,最大的数字是5
身份证号码:10
},
{
num:5,//应该保留,最大值为5
身份证号码:10
},
{ 
num:1,//应为0,最大值为5
身份证号码:10
},
{
num:2,//应保留,最大值为2
身份证号码:11
}];
让ids=Array.from(新集合(arr.map(i=>i.id));
让结果=[];
from(新集合(arr.map(i=>i.id)).forEach(a=>{
让tmp=arr.filter(i=>i.id==a).sort((a,b)=>b.num-a.num);
filter(i=>i.num==tmp[0].num).map(j=>result.push(j));
});

控制台日志(结果)我只得到一个结果。存在多个id,并且许多id具有多个顶级值结果。在您的示例中,您说过项目1、3和5应该保留,项目2和4应该保留。我的代码完全符合您的要求。所以我不明白为什么它对你来说不好。对我来说肯定没问题:)它只是因为某种原因对我庞大的数据集不起作用。这肯定是我的问题。这几乎奏效了。它返回了每个项目和每个id的最高num,但在一些id中应该有多个最高num,这些id也应该返回。我看到你用一个“随机”字段更新了你的问题,现在添加重复的更高的值更有意义。是的,我在第一稿中不够具体,我希望它能给后来的读者增加更多的清晰度。除了let-id-var之外,它工作得非常好。谢谢