如何去除美元符号与逗号后计算客户平均余额?
修复客户平均余额计算问题
原代码存在几个关键问题,导致无法正确计算平均余额:
- 函数参数是
array,但内部错误使用了全局变量customers,应该用传入的参数 hasOwnProperty(balance)中balance未加引号,会被当作变量解析,应该改为hasOwnProperty('balance')- 替换美元符号和逗号后得到的是字符串,直接累加会变成字符串拼接,需要转为数字
- 当客户没有
balance字段时,函数未返回原累加值total,会导致reduce中途出现undefined,破坏累加流程 - 计算平均时,应该除以存在
balance字段的客户数量,而非整个数组的长度
修复后的代码如下:
var averageBalance = function(customers) { const result = _.reduce(customers, function(acc, current) { if (current.hasOwnProperty('balance')) { // 去除符号并转为数字后累加,同时统计有效客户数 acc.sum += Number(current.balance.replace(/[$,]/g, '')); acc.count++; } return acc; }, { sum: 0, count: 0 }); // 避免出现除以0的异常情况 return result.count > 0 ? result.sum / result.count : 0; };
内容的提问来源于stack exchange,提问作者GloriousKaboom
相关产品推荐
相关产品推荐

