js处理数组问题

let arr = [{a:'苹果',b:90},{a:'苹果',b:2},{a:'苹果',b:4},{a:'香蕉',b:78},{a:'西瓜',b:45},{a:'西瓜',b:15}]
最后生成
[{a:'苹果',b:90},{a:'苹果',b:2},{a:'苹果',b:4}]
[{a:'香蕉',b:78}]
[{a:'西瓜',b:45},{a:'西瓜',b:15}]
麻烦写一下代码步骤,谢谢

阅读 1.4k
2 个回答

Object.values([{a:'苹果',b:90},{a:'苹果',b:2},{a:'苹果',b:4},{a:'香蕉',b:78},{a:'西瓜',b:45},{a:'西瓜',b:15}].reduce((res, v) => ((res[v.a] ||= []).push(v), res), {}))

相当于下面

const group = arr.reduce((res, v) => {
    res[v.a] ||= [];
    res[v.a].push(v); 
    return res;
}, {});
const result = Object.values(group);

这已知就有问题,选一种补全后的答案吧
问题调整为:
生成的结果:
`
{
'苹果': [ { a: '苹果', b: 90 }, { a: '苹果', b: 2 }, { a: '苹果', b: 4 } ],
'香蕉': [ { a: '香蕉', b: 78 } ],
'西瓜': [ { a: '西瓜', b: 45 }, { a: '西瓜', b: 15 } ]
}
`
答案

let res = {};
arr.forEach(item => {
  if (!res[item.a]) {
    res[item.a] = [];
  }
  res[item.a].push(item);
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题