如何使用nodejs在重复项中保持json个对象具有最高值

How to keep json object with highest value among duplicates with nodejs

我有 JSON 个从外部系统导入的对象,其中一些对象的 ID 值重复。 敌人例子:

{
"ID": "1",
"name": "Bob",
"ink": "100"
},
{
"ID":"2",
"Name": "George",
"ink": "100"
},
{
"ID":"1",
"name": "Bob",
"ink":"200"
}

我正在处理每个对象的信息,然后将它们推入一个新的 JSON 数组:

var array = {};
array.users = [];

for (let user of users) {
function (user) => {
...
array.users.push(user);
}
}

我需要删除所有重复项,保留墨键中具有最高值的那个。 我发现 solutions 在构建数组后对其执行此操作,但这意味着我没有使用系统资源 - 没有理由操纵无论如何都会被删除的用户。

我正在寻找一种方法来检查每个新用户是否具有 ID:value 对的用户已经存在于 array.users[] 数组中,如果存在,请比较墨水键,如果它更高 - 从数组中删除现有的,然后我可以继续我的操作代码并将新用户推送到数组中。

有什么想法可以最 elegant/efficient/shortest 完成此任务?

var array = {};
array.users = users.filter((user)=>{
  for (let userSecond of users) {
    if(userSecond.id === user.id && +userSecond.ink > +user.ink){
      return false;
    }
  }
  return true;
});

也许不是最干净的解决方案,但它应该可以完成工作。基本上你过滤用户。在过滤器中,您再次遍历每个用户以检查他们中是否有任何用户具有相同的 ID 和更多墨水,如果是这样,则应通过返回 false 来丢弃当前用户。如果没有找到具有相同 ID 和更多墨水的用户,则当前用户将保留在数组中。

我不确定我是否完全理解你的问题。如果我理解正确的话,你不想在构建后遍历整个数组并检查重复项?

“如果有疑问,请针对问题抛出哈希图”。使用地图而不是普通数组。映射键存储 ID。并将您的字段保存为值。如果密钥已经存在,那么您可以检查哪个值更高。

代码示例应如下所示:

let userMap = new Map()

for (let user in users) {
   if (userMap.has(user["ID"]) //Look which ink is bigger
   else //Store new entry
}

编辑:我的解决方案确实需要一个额外的步骤,并且不是直接在原始数组中完成的。但是,我仍然认为地图可能是处理此问题的最有效方法之一...