使用Array.reduce按性别分组用户时输出未包含全部记录如何解决
问题原因
你写的reduce回调逻辑中,当首次匹配到某个性别的记录时,只完成了分组结构的初始化,没有将当前遍历到的这条记录加入对应分组的members数组,最终会导致每个性别的第一条记录全部丢失。
修正代码
只需要在else分支的初始化逻辑后,增加当前元素的入组操作即可:
console.log(JSON.stringify(inputArr.reduce((acc, ele) => { if (acc[ele.gender]) { acc[ele.gender].members.push(ele); } else { acc[ele.gender] = { members: [] } // 新增:把当前首次匹配到的对应性别元素加入分组 acc[ele.gender].members.push(ele); } return acc; }, {})))
你也可以简化初始化逻辑,创建分组时直接把当前元素放入数组:
acc[ele.gender] = { members: [ele] }
运行输出
修正后输出的内容会包含所有5条原始记录,结构如下:
{ "MALE": { "members": [ {"gender":"MALE","name":"A","age":20}, {"gender":"MALE","name":"B","age":12}, {"gender":"MALE","name":"D","age":21} ] }, "FEMALE": { "members": [ {"gender":"FEMALE","name":"C","age":16}, {"gender":"FEMALE","name":"E","age":30} ] } }
内容的提问来源于stack exchange,提问作者linkedlist
相关产品推荐
相关产品推荐

