JavaScript如何按相同标识字段将数组合并为指定格式的对象数组
实现方案
你可以先通过临时对象按n字段做分组聚合,再转换为数组即可,具体代码如下:
let array = [ { text: "Green marbles", number: 10, n: 1 }, { text: "Pink marbles", number: 5, n: 1 }, { text: "Yellow marbles", number: 2, n: 1 }, { text: "Green marbles", number: 10, n: 2 }, { text: "Pink marbles", number: 5, n: 2 }, { text: "Yellow marbles", number: 2, n: 2 } ] // 用临时对象做分组映射,key为n的值 const groupMap = {} array.forEach(item => { const nVal = item.n // 不存在对应分组时初始化 if (!groupMap[nVal]) { groupMap[nVal] = { n: nVal } } // 写入text对应的number值 groupMap[nVal][item.text] = item.number }) // 把映射对象的值转为数组就是目标结果 const formatArray = Object.values(groupMap)
如果实际场景中同一个n下可能存在相同text的条目,需要累加number的话,可以把赋值的行改成:
groupMap[nVal][item.text] = (groupMap[nVal][item.text] || 0) + item.number
你原来的嵌套遍历对象键的思路是不必要的,不需要遍历每个元素的所有属性,直接提取所需的n、text、number三个字段做聚合即可。
内容的提问来源于stack exchange,提问作者Lovely
相关产品推荐
相关产品推荐

