You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript/Node.js中按entryId分组并获取id最大的元素

如何在Node.js中按entryId分组并获取每组id最大的元素

嘿,你的问题很常见——现有代码只维护了一个全局的max变量,所以只能找出整个数组里id最大的元素,没法按entryId分组处理。我给你两种解决思路,都能实现类似SQL里group by entryId取最大id的效果:

方法一:手动遍历分组(直观易懂)

我们可以创建一个对象来存储每个entryId对应的最大元素,遍历数组时逐个更新对应分组的最大值:

function getMaxByEntryId(array) {
  // 用对象存储每个entryId对应的最大元素
  const maxMap = {};
  for (const item of array) {
    const entryId = item.entryId;
    // 如果当前entryId未记录,或者当前item的id更大,就更新记录
    if (!maxMap[entryId] || item.id > maxMap[entryId].id) {
      maxMap[entryId] = item;
    }
  }
  // 将对象的值转为数组返回,和你需要的结构一致
  return Object.values(maxMap);
}

方法二:用reduce简化代码(更简洁)

利用数组的reduce方法可以更紧凑地实现相同逻辑,本质和上面的循环思路一致:

const groupByMaxId = arr => 
  Object.values(arr.reduce((acc, curr) => {
    const { entryId, id } = curr;
    if (!acc[entryId] || id > acc[entryId].id) {
      acc[entryId] = curr;
    }
    return acc;
  }, {}));

测试效果

用你提供的测试数组验证一下:

const testArray = [
  { "entryId": "7wpNAXhYI", "id": 5 },
  { "entryId": "7wpNAXhYI", "id": 6 },
  { "entryId": "5PGB23RI", "id": 7 },
  { "entryId": "5PGB23RI", "id": 8 }
];

console.log(getMaxByEntryId(testArray));
// 输出:[ { entryId: '7wpNAXhYI', id: 6 }, { entryId: '5PGB23RI', id: 8 } ]

内容的提问来源于stack exchange,提问作者Prem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:36:20