如何计算JavaScript数组中多个对象的对应数值差值?
实现对象数组的相邻元素差值计算
输入数组
const obj = [ { key1: 3, key2: 5, key3: 6, }, { key1: 2, key2: 3, key3: 4, }, { key1: 6, key2: 5, key3: 5, } ];
需求
生成一个新数组,其中每个元素是相邻对象对应键的差值(后一个对象的值减去前一个对象的值),预期结果如下:
[ { key1: -1, key2: -2, key3: -2 }, { key1: 4, key2: 2, key3: 1 } ]
解决方案
你找到的代码仅支持数值数组,我们可以修改逻辑来处理对象数组,以下是两种实现方式:
方式一:基础循环实现
const objectDifferenceArray = (arr) => { const differenceArray = []; for (let i = 1; i < arr.length; i++) { const currentObj = arr[i]; const prevObj = arr[i - 1]; const diffObj = {}; // 遍历对象键,计算差值(自动跳过非数值或不存在的键) for (const key in currentObj) { if (prevObj.hasOwnProperty(key) && typeof currentObj[key] === 'number' && typeof prevObj[key] === 'number') { diffObj[key] = currentObj[key] - prevObj[key]; } } differenceArray.push(diffObj); } return differenceArray; }; // 调用示例 console.log(objectDifferenceArray(obj));
方式二:简洁函数式实现
利用map和reduce简化代码,逻辑更紧凑:
const objectDifferenceArray = (arr) => { return arr.slice(1).map((current, idx) => { const prev = arr[idx]; return Object.keys(current).reduce((diff, key) => { diff[key] = current[key] - prev[key]; return diff; }, {}); }); }; // 调用示例 console.log(objectDifferenceArray(obj));
说明
两种方法都会遍历数组中的相邻对象,对每个对应键的数值计算差值(后减前),最终生成符合需求的差值对象数组。基础循环版本会自动跳过非数值或前后对象不存在的键,函数式版本默认所有键对应数值,可根据需求添加类型判断逻辑。
内容的提问来源于stack exchange,提问作者Owenn
相关产品推荐
相关产品推荐

