JavaScript如何基于两个数组生成指定键值的对象数组?
问题原因说明
你原代码的问题在于,Object.assign({}, arr)会将数组类型的arr转换为以数字下标为键的对象,例如["Alex", 20]转换后得到{0: "Alex", 1: 20},不会自动关联a数组的自定义键名,所以不符合需求。
实现方案
方案1:reduce实现(兼容性最好)
遍历b数组的每一行数据,再通过reduce把a数组的键和当前行的对应值绑定成对象:
const result = b.map(item => a.reduce((acc, key, idx) => { acc[key] = item[idx] return acc }, {}) )
方案2:Object.fromEntries实现(写法最简洁,ES2019+支持)
先把键和值拼成[键, 值]的配对数组,直接生成对象:
const result = b.map(item => Object.fromEntries(a.map((key, idx) => [key, item[idx]])) )
方案3:for循环实现
如果你习惯用基础for循环写法,也可以按以下逻辑实现:
const result = [] for (let i = 0; i < b.length; i++) { const currentItem = b[i] const obj = {} for (let j = 0; j < a.length; j++) { obj[a[j]] = currentItem[j] } result.push(obj) }
内容的提问来源于stack exchange,提问作者Angels
相关产品推荐
相关产品推荐

