如何去除美元符号与逗号后,用.reduce计算客户平均账户余额?
代码分析与修正
首先,你的思路没问题:用reduce处理求和逻辑是合适的,parseFloat在这里的用法也是正确的——它能把清理后的字符串转换成浮点数,完全符合需求。
不过你的代码存在两个小问题:
- 函数参数
array没有被使用,反而直接用了全局变量people,这会让函数失去复用性,没法处理其他类似结构的数组。 - 在
reduce的回调里,当遍历到最后一个元素时,你直接返回了acc / array.length,但此时还没把最后一个元素的余额加到累加器acc里,导致总和少了最后一项,计算出的平均值会错误。
修正后的代码
var people = [ { name: "Courtney", age: 43, balance: "$3,400" }, { name: "Regina", age: 53, balance: "$4,000" }, { name: "Jay", age: 28, balance: "$3,000" }, ]; var averageBalance = function(array){ // 先通过reduce求总和 const total = array.reduce(function(acc, current){ // 清理字符串并转成数字后累加 return acc + parseFloat(current.balance.replace(/\$|,/g, "")); }, 0); // 最后计算平均值 return total / array.length; };
关键说明
- 字符串转数字:
current.balance.replace(/\$|,/g, "")会把"$3,400"变成"3400",再用parseFloat转成数字3400,这部分你的写法完全正确。 - reduce的正确用法:先完成所有元素的累加得到总和,再单独计算平均值,逻辑更清晰,也避免了遍历最后一个元素时的判断失误。
- 函数复用性:使用传入的
array参数而不是全局变量,现在这个函数可以处理任何包含balance字段的对象数组。
内容的提问来源于stack exchange,提问作者CarelessWhisper
相关产品推荐
相关产品推荐

