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

如何根据对象的特定属性值匹配更新另一个对象的对应数据

核心问题原因

  • 引用共享问题:你给所有账户的data属性都绑定了同一个blankDataArr数组。JS中数组属于引用类型,所有账户的data实际指向同一个内存地址,只要修改其中一个的数组值,所有账户的data都会同步变化,这是你所有账户数据都相同的核心原因。
  • 初始化逻辑错误:generatedObj初始化时通过new Array(yearArrLength).fill(0)填充了无效的0元素,后续的查找匹配逻辑会因此出现异常。
  • 字段兼容缺失:你提供的原始数据中,第二个账户的名字段为Name,不是统一的AccountName,只读取AccountName会导致第二个账户名称获取失败,匹配逻辑失效。
  • 循环逻辑冗余:使用Object.keys遍历数组属于冗余写法,多层嵌套循环也会降低执行效率。

修正代码

假设你预先定义的年份数组为const yearsArr = ["2015", "2016"],修正后代码如下:

const yearsArr = ["2015", "2016"]
const yearArrLength = yearsArr.length;
// 初始化空数组存储结果
const generatedObj = [];

// 生成账户初始结构
for (const item of userData.Data) {
    // 兼容两种账户名字段
    const accName = item.AccountName || item.Name;
    if (!generatedObj.find(entry => entry.name === accName)) {
        // 每次生成独立的空白数组,避免引用共享
        const blankData = new Array(yearArrLength).fill(0);
        generatedObj.push({ name: accName, data: blankData });
    }
}

// 填充对应年份的金额
for (const item of userData.Data) {
    const accName = item.AccountName || item.Name;
    const yearIndex = yearsArr.indexOf(item.Year);
    const targetAccount = generatedObj.find(entry => entry.name === accName);
    if (targetAccount && yearIndex !== -1) {
        targetAccount.data[yearIndex] = item.Amount;
    }
}

运行上述代码即可得到你预期的输出结果。

内容的提问来源于stack exchange,提问作者MeltingDog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:24:00