JavaScript如何将二维数组按指定键名转换为对象数组
问题根因
你当前写的转换逻辑遍历方向错了:原二维数组是按行存储所有字段值的结构,3个子数组分别对应num、str、let三个字段的全量值,不是单条结果对象的三个属性。你现在用map遍历原数组的每一行,相当于把三个整行当成了三个单对象处理,自然拿不到预期结果。
可行实现
我们需要按列维度遍历取值:同一个列索引下,三个子数组对应位置的值,正好拼成一个结果对象。
基础固定字段写法
如果你的字段和数组行的对应关系固定,直接用列索引遍历即可:
const myArray = [ [1,2,3,4], ["1","2","3","4"], ["a", "b", "c", "d"] ] const result = myArray[0].map((_, colIdx) => ({ num: myArray[0][colIdx], str: myArray[1][colIdx], let: myArray[2][colIdx] }))
执行后输出的结构和你给出的目标结果完全一致,可以直接基于对象键做后续筛选操作。
通用可扩展写法
如果后续可能新增字段/行,可以提前配置字段和行的映射关系,不用修改核心遍历逻辑:
// 数组顺序和原二维数组的行顺序一一对应 const FIELD_ORDER = ['num', 'str', 'let'] const result = myArray[0].map((_, colIdx) => { const rowItem = {} FIELD_ORDER.forEach((fieldKey, rowIdx) => { rowItem[fieldKey] = myArray[rowIdx][colIdx] }) return rowItem })
内容的提问来源于stack exchange,提问作者noc_coder
相关产品推荐
相关产品推荐

