您使用 parseInt 是正确的。
但是您需要为每个 reduce 参数使用它。
此外,您还需要检查每个 parseInt 的结果是否是一个数字,因为如果不是,该函数将尝试将一个数字与 NaN 相加,并且所有其他和最终也将是 NaN。
Mozilla关于 parseInt的 ECMAscript文档说:
如果第一个字符不能转换为数字,则 parseInt 返回 NaN。
然后,为了避免让 NaN 破坏你的目标,你可以像这样实现它:
function parseIntForSum(str) {
var possibleInteger = parseInt(str);
return isNaN(possibleInteger) ? 0 : possibleInteger;
}
function sum(f, s) {
return parseIntForSum(f) + parseIntForSum(s);
}
window.alert('sum = ' + [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ].reduce(sum));
这是一个 jsfiddle 工作:http: //jsfiddle.net/cLA7c/