javascript - Javascript - 数组的总和等于 NaN
问题描述
我正在计算我的数组的前 4 个最大数:
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
.sort((a, b) => {
return b - a
})
.slice(0, 4)
.map((item) => {
return String(item).replace(/(.)(?=(\d{3})+$)/g, '$1,')
});
console.log // Array(4) [ "195,918", "171,749", "167,076", "116,486" ]
我现在正在尝试使用.reduce
在我的尝试中计算数组中这 4 个数字的总和,但我得到了 NaN 的返回,这是我的代码:
let sum = topArr.reduce(function (a, b) {
return a + b;
}, 0);
我也没有说这些被转换的数字是一串数字,所以试图将它们转换成整数,let sumArr = topArr.map(Number);
也返回 NaN。我期望数组中 4 个数字的总和结果等于651,229
解决方案
逗号不在 JavaScript 数字中 - 另外,在topArr
' 函数链的末尾,您将所有内容转换回字符串。为了最好地保留您现有的代码,我只是将您的逗号字符串替换正则表达式添加到reduce
:
const data = ["195,918", "171,749", "167,076", "116,486"]
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
.sort((a, b) => {
return b - a
})
.slice(0, 4)
.map((item) => {
return String(item).replace(/(.)(?=(\d{3})+$)/g, '$1,')
});
let sum = topArr.reduce((a, b) => a + Number(b.replace(/(,\s*)+/g, '').trim()), 0);
console.log(topArr);
console.log(sum);
但是,此解决方案更有效,因为它删除了在结尾处重新转换为字符串topArr
:
const data = ["195,918", "171,749", "167,076", "116,486"]
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
.sort((a, b) => {
return b - a
});
let sum = topArr.reduce((a, b) => a + b, 0);
console.log(topArr);
console.log(sum);
如您所见,它们都产生相同(正确)的输出。
推荐阅读
- reactjs - 反应原生中的空白
- r - 如何找到表格特定部分的总和?
- c++ - 如何从 CPP 中的基类继承构造函数?
- c++ - std::abs 可以在 constexpr 函数中使用,但前提是它是模板化的。为什么?
- laravel - 如何使用 laravel livewire 和分页解决奇怪的行为?
- php - 对类的每次修改都会导致错误“无法声明类,因为该名称已在使用中”
- android - 以编程方式弹出/卸载 USB
- c# - 如何在反序列化时丢弃具有特定值的 JSON 元素
- git - 使用 JGit 克隆 Git 存储库时如何修复“Packfile is truncated”错误
- java - 如何将作为参数从 html 文件传递到 java applet 程序中的矩形的颜色设置