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

如何计算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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:17