You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用动态键值动态创建JavaScript对象数组?

问题修复与实现方案

你的代码存在两个核心问题:

  1. 始终复用同一个obj对象,导致最终数组里的所有元素都是同一个对象的引用,最后全是最后一次循环的赋值结果
  2. 取值逻辑错误,只固定取了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:22:51