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

如何对属性数量相同的两个JS对象按顺序执行除法运算

解决JavaScript两个对象属性值按顺序除法的问题

这问题挺常见的,咱们可以通过提取对象的属性值数组,再按索引对应计算的方式轻松解决,具体步骤和代码示例如下:

核心思路

因为两个对象的属性数量相同,我们只需要:

  1. 分别提取两个对象的属性值数组,确保顺序一一对应
  2. 遍历数组,将对应位置的元素执行除法运算
  3. 可选:将结果映射回原对象的键,生成带键的结果对象

代码实现

1. 定义原始对象

首先咱们先把两个原始对象写出来:

const obj1 = {'tv':390, 'table':200, 'cup':270, 'chair':325, 'door':300, 'books':290, 'radio':345};
const obj2 = {0:30, 1:25, 2:20, 3:35, 4:30, 5:10, 6:15};

2. 提取对应顺序的属性值数组

  • 对于obj1,它的键都是非数字字符串,ES6+中Object.values()会按对象定义时的插入顺序返回值数组
  • 对于obj2,它的键是数字,Object.values()会按数字键的升序返回值数组,正好和obj1的顺序匹配
const valuesFromObj1 = Object.values(obj1);
const valuesFromObj2 = Object.values(obj2);

3. 执行除法运算

用Array.map()方法遍历数组,将对应索引的元素相除,得到结果数组:

const divisionResults = valuesFromObj1.map((val, index) => val / valuesFromObj2[index]);
console.log(divisionResults); 
// 输出:[13, 8, 13.5, 9.285714285714286, 10, 29, 23]

4. 可选:生成带原键的结果对象

如果需要保留obj1的键,生成新的结果对象,可以这样做:

const keysFromObj1 = Object.keys(obj1);
const resultObject = {};

keysFromObj1.forEach((key, index) => {
  resultObject[key] = valuesFromObj1[index] / valuesFromObj2[index];
});

console.log(resultObject);
// 输出:{ tv: 13, table: 8, cup: 13.5, chair: 9.285714285714286, door: 10, books: 29, radio: 23 }

注意点:确保属性顺序正确

如果obj2的数字键不是连续升序的(比如键是{6:15, 0:30, ...}),那我们需要手动对obj2的键按数字排序后再取值,避免顺序错乱:

// 处理非顺序数字键的obj2
const sortedValuesFromObj2 = Object.keys(obj2)
  .map(key => Number(key)) // 将字符串键转为数字
  .sort((a, b) => a - b) // 按数字升序排序
  .map(sortedKey => obj2[sortedKey]); // 取出对应的值

内容的提问来源于stack exchange,提问作者Clint_A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:59