如何用动态键值动态创建JavaScript对象数组?
问题修复与实现方案
你的代码存在两个核心问题:
- 始终复用同一个
obj对象,导致最终数组里的所有元素都是同一个对象的引用,最后全是最后一次循环的赋值结果 - 取值逻辑错误,只固定取了
val.dims[0].values的数据,没有对应到每个key对应的dims项,且顺序和预期不符
以下是修正后的代码,完全支持动态keys和对应数量的dims对象,无需硬编码:
const val = { "dims": [{ "flOne": {}, "values": [100, 99, 98, 97, 96] }, { "flOne": {}, "values": [1, 2, 3, 4, 5] } ] }; const keys = ['a', 'b']; const data = []; // 取values数组的长度(所有dims的values长度应该一致) const valueLength = val.dims[0].values.length; for (let i = 0; i < valueLength; i++) { // 每次循环创建新对象,避免引用复用问题 const obj = {}; keys.forEach((key, j) => { // 每个key对应dims第j项的values数组的第i个值 obj[key] = val.dims[j].values[i]; }); data.push(obj); } console.log(data); // 输出:[{a:1, b:100}, {a:2, b:99}, {a:3, b:98}, {a:4, b:97}, {a:5, b:96}]
逻辑说明
- 循环遍历每个值的索引
i,对应结果数组中的每一个对象 - 每次循环新建空对象,保证每个数组元素都是独立的对象
- 通过
keys的索引j,匹配到val.dims中对应的项,取出该项values数组的第i个值,赋值给当前key
内容的提问来源于stack exchange,提问作者smpa01
相关产品推荐
相关产品推荐

