有没有一种正常的方法来计算JavaScript中数组值的总和?
类似于php-$sum = array_sum($nums);
我发现以下内容,顺便说一句-不起作用。
我需要结果-10
,而不是235
;
function sum(arr) {
return arr.reduce(function(a,b) {
return a + b
});
}
let nums = ["2","3","5"];
console.log(nums);
let summ = sum(nums);
console.log(summ);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 0 :(得分:3)
使用Number()
将其转换为数字。由于数组包含strings
,因此+
运算符将加入它们而不添加它们。
function sum(arr) {
return arr.reduce(function(a,b) {
return Number(a) + Number(b)
});
}
let nums = ["2","3","5"];
console.log(nums);
let summ = sum(nums);
console.log(summ);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 1 :(得分:3)
该数组包含字符串,您需要将它们解析为int
s,使用prev
或+
到parseInt()
function sum(arr) {
return arr.reduce(function(a, b) {
return +a + +b
});
}
let nums = ["2", "3", "5"];
console.log(nums);
let summ = sum(nums);
console.log(summ);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 2 :(得分:2)
一种可能的解决方法是使用 一元加运算符 将string representing numbers
强制为numbers
。
来自MDN:
一元加号是将某物转换为数字的最快且首选的方法
此外,我将您的函数定义更改为更具可读性,reduce()
以accumulator
的{{1}}开头,并且在数组的每次迭代中,它将当前修订后的数字加到蓄能器。
0
但是,应该注意的是,如果数组中有浮点数或其他值,则前一种将不起作用,在这种情况下,您可以将Number.parseFloat()与更通用的方法结合使用:
function sum(arr)
{
return arr.reduce((acc, num) => acc + (+num) /*Coercion to number*/, 0);
}
let nums = ["2","3","5"];
console.log(nums);
let summ = sum(nums);
console.log(summ);
答案 3 :(得分:1)
如果所有项目都是字符串,则将它们视为串联。另外,为完整性起见,您应提供零初始值。
const Operations = {
ADD : (a, b) => a + b,
SUB : (a, b) => a - b,
MUL : (a, b) => a * b,
DIV : (a, b) => a / b,
};
function sum(arr) {
return arr.reduce(Operations.ADD, 0); // Initialize at zero
}
let nums = [ "2", "3", "5" ];
console.log(nums);
let ans = sum(nums.map(x => parseInt(x, 10))); // Parse strings as integers
console.log(ans);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>