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

如何在键名不固定时累加数组前一项的指定键值到后一项

动态键名数组的累加计算实现

给定一个按日期排序的对象数组,其中每个对象包含固定键category、total,以及一个统一的动态键名(示例中为VALUE series variable)。需求是将数组中前一项动态键的值累加到后一项的对应键上,生成累加后的目标数组。此前尝试用forEach遍历,但因动态键名不确定,无法完成累加逻辑。

实现思路

  1. 获取动态键名:从数组第一个元素中筛选出除category和total之外的键,即为需要累加的目标键(题目明确数组内所有元素该键名一致)
  2. 遍历累加:维护一个累加变量,遍历数组时依次更新当前元素的动态键值,同时更新累加变量;建议浅拷贝原对象,避免修改原数组

代码实现

// 原数组
let originalArray = [
    {
        "category": 1384473600000,
        "total": 1,
        "VALUE series variable": 100
    },
    {
        "category": 1384992000000,
        "total": 1,
        "VALUE series variable": 1000
    },
    {
        "category": 1499990400000,
        "total": 1,
        "VALUE series variable": 10
    },
    {
        "category": 1565654400000,
        "total": 1,
        "VALUE series variable": 542
    },
    {
        "category": 1568505600000,
        "total": 1,
        "VALUE series variable": 124
    }
];

// 步骤1:获取动态键名
const dynamicKey = Object.keys(originalArray[0]).filter(key => !['category', 'total'].includes(key))[0];

// 步骤2:遍历累加,生成目标数组
let accumulatedValue = 0;
const newArray = originalArray.map(item => {
    // 浅拷贝原对象,避免修改原数组
    const newItem = {...item};
    accumulatedValue += newItem[dynamicKey];
    newItem[dynamicKey] = accumulatedValue;
    return newItem;
});

console.log(newArray);

代码说明

  • 动态键名获取:通过Object.keys()提取第一个元素的所有键,过滤固定键后取唯一结果(题目保证动态键唯一)
  • 累加逻辑:使用map遍历数组(也可替换为forEach),用accumulatedValue记录累计值,每次更新当前元素的动态键值;{...item}浅拷贝原对象,确保原数组数据不受影响
  • 若允许直接修改原数组,可简化为forEach遍历直接操作原元素

验证结果

生成的newArray与需求中的目标数组逻辑一致(注:示例目标数组第一个元素的category值疑似笔误,代码会保留原数组的category值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:30:51