JavaScript中数组值的总和

时间:2019-02-22 18:48:28

标签: javascript jquery

有没有一种正常的方法来计算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>

4 个答案:

答案 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>