如何将含重复键的JSON对象数组合并为按唯一键分组的数组
按对象键分组JSON数组的实现方案
你推测用reduce函数的思路完全正确,下面是具体实现代码:
const originalArray = [ { star: { apples: [ [Object], [Object] ] }, circle: { apples: [ [Object] ] } }, { star: { oranges: [ [Object], [Object] ] }, circle: { oranges: [ [Object] ] } }, { star: { bananas: [ [Object], [Object] ] } } ]; const groupedArray = Object.values(originalArray.reduce((acc, item) => { // 遍历当前对象的所有键值对 Object.entries(item).forEach(([key, value]) => { // 初始化分组(如果不存在) if (!acc[key]) { acc[key] = { symbol: key, data: [] }; } // 将当前值加入对应分组的data数组 acc[key].data.push(value); }); return acc; }, {})); console.log(groupedArray);
代码说明:
- 以空对象作为
reduce的初始累加器,用来临时存储每个键的分组数据 - 用
Object.entries遍历数组中每个对象的键值对,拆分出键(如star)和对应的数据值 - 若累加器中无当前键的分组,则创建包含
symbol字段和空data数组的分组对象 - 将当前键对应的数据值推入该分组的
data数组 - 最后通过
Object.values将累加器中的分组对象转为数组,得到目标格式
内容的提问来源于stack exchange,提问作者BitByte
相关产品推荐
相关产品推荐

