JavaScript如何将嵌套数组转换为按组织分组的键控对象结构
实现方案
我们直接使用JavaScript内置的Array.reduce方法即可实现,代码简洁易读,无需编写复杂的循环判断逻辑,即使数组内的公司顺序打乱也能正确完成分组。
完整代码
// 原始数据 const rawData = [["Organisation","ID","Name"],["ACME","123456","Bart Simpson"],["ACME","654321","Ned Flanders"],["ACME","1234","Edna Kabappel"],["Yahoogle","666666","Bon Scott"],["Yahoogle","99999","Neil Young"],["Yahoogle","111111","Shania Twain"]] // 分组逻辑 const result = rawData.slice(1).reduce((acc, [org, id, name]) => { // 若当前公司不存在于结果中,先初始化对应空数组 if (!acc[org]) acc[org] = [] // 插入当前人员数据,ID转数字类型匹配输出要求 acc[org].push({ ID: Number(id), Name: name }) return acc }, {}) // 打印验证结果 console.log(JSON.stringify(result, null, 2))
逻辑说明
slice(1):跳过原始数组第一个表头子数组,直接处理后续业务数据- reduce方法的第二个参数
{}是最终返回结果的初始值,为一个空对象 - 代码中使用数组解构赋值,直接将每个子数组的三个元素分别命名为
org(公司名)、id、name,无需手动取下标,可读性更高 - 仅需要简单判断当前公司是否已存在于结果中,不存在就初始化数组,直接插入数据即可,无需对比前一项的公司名,适配所有排序的原始数据
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

