如何在键名不固定时累加数组前一项的指定键值到后一项
动态键名数组的累加计算实现
给定一个按日期排序的对象数组,其中每个对象包含固定键category、total,以及一个统一的动态键名(示例中为VALUE series variable)。需求是将数组中前一项动态键的值累加到后一项的对应键上,生成累加后的目标数组。此前尝试用forEach遍历,但因动态键名不确定,无法完成累加逻辑。
实现思路
- 获取动态键名:从数组第一个元素中筛选出除
category和total之外的键,即为需要累加的目标键(题目明确数组内所有元素该键名一致) - 遍历累加:维护一个累加变量,遍历数组时依次更新当前元素的动态键值,同时更新累加变量;建议浅拷贝原对象,避免修改原数组
代码实现
// 原数组 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
相关产品推荐
相关产品推荐

