如何在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
相关产品推荐
相关产品推荐

