如何在JavaScript中使用循环对对象各元素执行减法操作
修改后的完整实现代码如下:
function splitTheBill(x) { let toPayObject = {}; function sum(obj) { let sum = 0; for (let el in obj) { if (obj.hasOwnProperty(el)) { sum += Number(obj[el]); } } return sum; } let amountPaid = sum(x); // 动态获取参与分摊的人数,适配任意人数场景 const participantCount = Object.keys(x).length; let shouldPay = amountPaid / participantCount; console.log("总支付金额 £" + amountPaid + " 人均应付:£" + shouldPay); // 遍历计算每人差额,存入新对象 for (let person in x) { if (x.hasOwnProperty(person)) { toPayObject[person] = x[person] - shouldPay; } } return toPayObject; }
调用示例splitTheBill({A: 20, B: 15, C: 10})可得到预期输出{A: 5, B: 0, C: -5}。
核心调整说明
- 修正了sum函数的内部引用逻辑,遍历传入的参数对象而非固定依赖外层的x变量,提升代码复用性
- 人均应付金额改为按实际参与人数动态计算,不再固定除以3,适配2人及以上的分摊场景
- 新增对象遍历逻辑,将每个成员的已付金额减去人均应付后存入新对象,不会修改传入的原始数据
- 将原代码中的
parseInt替换为Number,支持小数金额的计算,避免整数截断导致的计算误差
内容的提问来源于stack exchange,提问作者Jonathan Joseph
相关产品推荐
相关产品推荐

