如何在JavaScript中将单键数组映射到多嵌套值数组
问题:批量将键映射到嵌套数组生成对象数组
我刚学JavaScript一个月,现在需要把arr1里的键分配给arr2中每个嵌套数组的对应字符串,生成对象数组。
给定数据
const arr1 = ["Date","Start","High","Low","End","AdjEnd","Amount"] // 要分配的键 const arr2 = [["1997-06-01","75","80","65","78","79","3000"], ["1997-06-02","70","75","60","73","74","3300"], ["1997-06-03","80","85","70","83","84","3800"],...] // 包含1万+条此类嵌套数组
期望输出
const newArray = [ { Date: "1997-06-01", Start: "75", High: "80", Low: "65", End: "78", AdjEnd: "79", Amount: "3000" }, { Date: "1997-06-02", Start: "70", High: "75", Low: "60", End: "73", AdjEnd: "74", Amount: "3300" }, { Date: "1997-06-03", Start: "80", High: "85", Low: "70", End: "83", AdjEnd: "84", Amount: "3800" } // 后续所有嵌套数组对应生成的对象 ]
当前低效实现
我能写出下面的代码得到正确格式,但这种手动逐个处理的方式对上万条数据完全不实用:
var result1 = {}; arr1.forEach((key, i) => result1[key] = arr2[0][i]); var result2 = {}; arr1.forEach((key, i) => result2[key] = arr2[1][i]); // 还要继续写result3、result4... var allresult = [result1, result2] // 还要手动添加所有result console.log(allresult);
高效解决方案
方法1:map + reduce 组合
遍历arr2的每个嵌套数组,用reduce将键与对应值绑定生成对象:
const newArray = arr2.map(item => { return arr1.reduce((obj, key, index) => { obj[key] = item[index]; return obj; }, {}); });
方法2:map + forEach(更直观)
如果对reduce逻辑不熟悉,用forEach构建对象的写法更易懂:
const newArray = arr2.map(item => { const obj = {}; arr1.forEach((key, index) => { obj[key] = item[index]; }); return obj; });
方法3:Object.fromEntries(ES2019+)
将键数组与每个嵌套数组配对成键值对数组,再直接转换为对象,代码更简洁:
const newArray = arr2.map(item => { const entries = arr1.map((key, index) => [key, item[index]]); return Object.fromEntries(entries); });
以上三种方法都能高效处理上万条数据,无需手动逐个创建对象,完全自动化完成键值映射。
内容的提问来源于stack exchange,提问作者pl9nt
相关产品推荐
相关产品推荐

