如何对属性数量相同的两个JS对象按顺序执行除法运算
解决JavaScript两个对象属性值按顺序除法的问题
这问题挺常见的,咱们可以通过提取对象的属性值数组,再按索引对应计算的方式轻松解决,具体步骤和代码示例如下:
核心思路
因为两个对象的属性数量相同,我们只需要:
- 分别提取两个对象的属性值数组,确保顺序一一对应
- 遍历数组,将对应位置的元素执行除法运算
- 可选:将结果映射回原对象的键,生成带键的结果对象
代码实现
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
相关产品推荐
相关产品推荐

