如何计算数组中两个对象按键对应的属性差值?
问题描述
给定如下JavaScript数组:
const array = [{obj1: {price: 10, quantity: 10}, obj2: {price: 20, quantity: 10}}]
需要按每个属性键计算obj1与obj2对应属性的差值(即obj1.属性 - obj2.属性),预期结果为:
{price: -10, quantity: 0}
尝试用reduce函数实现但未成功,求解决方法。
解决方案
首先要注意,你的数组里只有一个元素,第一步需要先取出这个对象,再获取其中的obj1和obj2。下面提供两种可行的实现方式:
方法一:遍历属性键直接计算
const [item] = array; // 取出数组中的唯一对象 const { obj1, obj2 } = item; // 解构出obj1和obj2 const result = {}; // 遍历obj1的所有属性键并计算差值 Object.keys(obj1).forEach(key => { result[key] = obj1[key] - obj2[key]; }); console.log(result); // {price: -10, quantity: 0}
方法二:使用reduce函数实现
如果想用reduce,可以基于属性键数组进行累积计算:
const [item] = array; const { obj1, obj2 } = item; const result = Object.keys(obj1).reduce((acc, key) => { acc[key] = obj1[key] - obj2[key]; return acc; }, {}); // 初始值设为空对象 console.log(result); // {price: -10, quantity: 0}
关键说明
- 先从数组提取目标对象:因为数组只有一个元素,用数组解构
const [item] = array更简洁。 - 确保
obj1和obj2的属性键完全一致,若存在不一致的键,可额外添加判断逻辑(比如检查obj2是否包含对应键)。
内容的提问来源于stack exchange,提问作者B.Mat
相关产品推荐
相关产品推荐

