如何根据array2对应值更新array1中years对象的键值对?
数组对象years数值批量相减的问题解决
你的代码有两个关键错误导致未生效:
Object.entries()返回的是**[键, 值]格式的数组**,不是带.key和.value属性的对象,所以你用keyValuePair.key、keyValuePair.value根本取不到正确值。- 你的数据里
years对象的属性值直接是数字,不是嵌套对象,所以array2Record.years[keyValuePair.key].value多了个.value,会报错或者取到undefined。
修正后的代码如下:
array1.forEach(r1 => { const array2Record = array2.find(r2 => r2.key1 === r1.key1 && r2.key2 === r1.key2); // 遍历array1当前项的years所有键值对 Object.entries(r1.years).forEach(([year, val]) => { // 直接修改r1.years对应的年份数值 r1.years[year] = val - array2Record.years[year]; }); });
如果不想修改原array1,而是生成一个新数组(更推荐的不可变写法),可以用map:
const updatedArray1 = array1.map(r1 => { const array2Record = array2.find(r2 => r2.key1 === r1.key1 && r2.key2 === r1.key2); // 复制原对象,避免修改原数据 return { ...r1, years: Object.fromEntries( Object.entries(r1.years).map(([year, val]) => [ year, val - array2Record.years[year] ]) ) }; });
运行后,比如A/Fred的2013数值会从16减3得到13,Jim的2013从1减9得到-8,均符合预期。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

