拆分账单-JavaScript练习

拆分账单-JavaScript练习,javascript,javascript-objects,for-in-loop,Javascript,Javascript Objects,For In Loop,我目前正在学习JS,我正在努力完成一个编码练习。到目前为止,我已经在代码的离线和在线部分上使用了大量资源,成功地拼凑出了以下代码。我差一点了,只是我的结果中的数字不正确 一些背景: 在函数中输入一个对象,输出一个函数,显示每个人根据对象中的(总账单/人)应支付或接收的金额。每个属性==个人。结果必须四舍五入到小数点后2位 function splitTheBill(group) { var result = {}; var sum = 0; for (var perso

我目前正在学习JS,我正在努力完成一个编码练习。到目前为止,我已经在代码的离线和在线部分上使用了大量资源,成功地拼凑出了以下代码。我差一点了,只是我的结果中的数字不正确

一些背景: 在函数中输入一个对象,输出一个函数,显示每个人根据对象中的(总账单/人)应支付或接收的金额。每个属性==个人。结果必须四舍五入到小数点后2位

function splitTheBill(group) {
    var result = {};
    var sum = 0;

    for (var person in group) {
        sum += group[person];
        var avg = sum / (Object.keys(group).length);
        result[person] = Math.floor(-100 * (group[person] - avg))/100;
    }
    return result;
}

splitTheBill({A: 7, B: 3, C: 2});

// console result comes out to be: { A: -4.67, B: 0.33, C: 2 }

// if avg of above object is 4, then answer should be: {A: -3.00, B: 1.00, C: 2.00} 

练习本身对这个问题不重要。问题在于为什么代码会产生错误的结果。我已经检查了sum和avg是否返回正确的值,它们确实返回了正确的值。可能是for..in循环中的
结果[person]
导致了一个问题,我不完全明白原因。

您无法得到尚未完全相加的总和的平均值,因此您的
avg
变量不是您认为的那样

功能拆分账单(组){
var result={};
var总和=0;
for(组中的变量键){
总和+=组[键];
}
var avg=总和/(对象.键(组).长度);
对于(组中的个人){
结果[人]=数学地板(-100*(组[人]-平均值))/100;
}
返回结果;
}
var r=splitTheBill({A:7,B:3,C:2});

控制台日志(r)
您无法得到尚未完全相加的总和的平均值,因此您的
avg
变量并非您所认为的那样

功能拆分账单(组){
var result={};
var总和=0;
for(组中的变量键){
总和+=组[键];
}
var avg=总和/(对象.键(组).长度);
对于(组中的个人){
结果[人]=数学地板(-100*(组[人]-平均值))/100;
}
返回结果;
}
var r=splitTheBill({A:7,B:3,C:2});
控制台日志(r)应该尽可能简单

功能拆分账单(obj){
//求总数
var合计=0;
Object.keys(obj).forEach(函数(key){
总计+=对象[键]
});
//求平均数
var average=总/(对象键(obj)长度);
//现在进行拆分
var result={};
Object.keys(obj).forEach(函数(key){
结果[关键点]=平均值-obj[关键点]
});
返回结果;
}
console.log(拆分账单({
A:7,
B:3,
C:2
}))
应该尽可能简单

功能拆分账单(obj){
//求总数
var合计=0;
Object.keys(obj).forEach(函数(key){
总计+=对象[键]
});
//求平均数
var average=总/(对象键(obj)长度);
//现在进行拆分
var result={};
Object.keys(obj).forEach(函数(key){
结果[关键点]=平均值-obj[关键点]
});
返回结果;
}
console.log(拆分账单({
A:7,
B:3,
C:2

}))
是的,我意识到我可以使用.toFixed(2),但是,面对挑战,它需要一个数字类型。它不必显示结尾0。但现在另一个问题是,它无法通过测试,因为显然0*-1=-0,它希望看到一个0。是的,在一些非常罕见的情况下,
-0
0
不同,但你可以解决我意识到我可以使用的Easilyyah。toFixed(2),然而,面对挑战,它需要一个数字类型。它不必显示结尾0。但是现在另一个问题是它无法通过测试,因为显然0*-1=-0,它希望看到一个0。是的,在一些非常罕见的情况下,
-0
0
不一样,但是你可以很容易地解决这个问题