JS 数组对象根据某一相同key合并成新的数组
很久没写随笔了,可能太安逸了!!!
例子:
let arr = [ { name: '小明',age: 20,school: '清华' }, { name: '小红',age: 21,school: '清华' }, { name: '小白',age: 18,school: '北大' }, { name: '小黄',age: 19,school: '北大' }, { name: '小浪',age: 21,school: '哈佛' }, ]
需求是将具有相同 “school” 的对象合并为新的数组
结果如下:
let data = [ { school: "清华", children: [ { name: "小明", age: 20, school: "清华" }, { name: "小红", age: 21, school: "清华" }, ] }, { school: "北大", children: [ { name: "小白", age: 18, school: "北大" }, { name: "小黄", age: 19, school: "北大" }, ] }, { school: "哈佛", children: [ { name: "小浪", age: 21, school: "哈佛" }, ] }, ]
解决方案一:
handlerDatas(arr){ // arr 传过来的原数组 let tempArr = []; let endData = []; for (let i = 0; i < arr.length; i++) { if (tempArr.indexOf(arr[i].school) === -1) { endData.push({ school: arr[i].school, children: [arr[i]] }); tempArr.push(arr[i].school); } else { for (let j = 0; j < endData.length; j++) { if (endData[j].school == arr[i].school) { endData[j].children.push(arr[i]); break; } } } } console.log(endData); // 最终输出 },
解决方案二:
handlerDatas(arr){ let obj = {}; arr.forEach((item, index) => { let { school } = item; if (!obj[school]) { obj[school] = { school, children: [] } } obj[school].children.push(item); }); let data = Object.values(obj); // 最终输出 },
还有其它的方案,可以自行百度。
以上解决方案借鉴了其他博主的文章
扩展延伸: 将数组对象改成对象数组
let arr = [ { name: '小明',age: 20,school: 'qinghua',}, { name: '小红',age: 21,school: 'qinghua',}, { name: '小白',age: 18,school: 'beida',}, { name: '小黄',age: 19,school: 'beida',}, { name: '小浪',age: 21,school: 'hafo',}, ] handlerDatas(arr){ let obj = {}; arr.forEach((item, index) => { let { school } = item; if (!obj[school]) { obj[school] = { school, children: [] } } obj[school].children.push(item); }); let data = Object.values(obj); let newData = {}; data.forEach((item, i) => { let key = item.school; let value = item.children; newData[key] = value; }); console.log(newData); // 最终输出 },
The most terrible person in the world is yourself
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix