如何查找数字数组的总和

2022-08-29 22:03:39

给定一个数组,我如何找到它的元素之和?(在本例中,总和将为 。)[1, 2, 3, 4]10

我认为 $.each 可能很有用,但我不确定如何实现它。


答案 1

这正是 .reduce

如果您使用的是 ECMAScript 2015(又名 ECMAScript 6):

const sum = [1, 2, 3].reduce((partialSum, a) => partialSum + a, 0);
console.log(sum); // 6

对于较旧的 JS:

const sum = [1, 2, 3].reduce(add, 0); // with initial value to avoid when the array is empty

function add(accumulator, a) {
  return accumulator + a;
}

console.log(sum); // 6

是不是很漂亮?:-)


答案 2

建议(使用默认值减少)

Array.prototype.reduce 可用于循环访问数组,将当前元素值添加到前一个元素值的总和中。

console.log(
  [1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
  [].reduce((a, b) => a + b, 0)
)

不带默认值

你得到一个类型错误

console.log(
  [].reduce((a, b) => a + b)
)

在 ES6 的箭头功能之前

console.log(
  [1,2,3].reduce(function(acc, val) { return acc + val; }, 0)
)

console.log(
  [].reduce(function(acc, val) { return acc + val; }, 0)
)

非数字输入

如果非数字是可能的输入,你可能想要处理它?

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => a + b)
)

let numOr0 = n => isNaN(n) ? 0 : n

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => 
    numOr0(a) + numOr0(b))
)

不推荐的危险评估使用

我们可以使用 eval 来执行 JavaScript 代码的字符串表示。使用 Array.prototype.join 函数将数组转换为字符串,我们将 [1,2,3] 更改为 “1+2+3”,其计算结果为 6。

console.log(
  eval([1,2,3].join('+'))
)

//This way is dangerous if the array is built
// from user input as it may be exploited eg: 

eval([1,"2;alert('Malicious code!')"].join('+'))

当然,显示警报并不是可能发生的最糟糕的事情。我包括这一点的唯一原因是作为Ortund问题的回答,因为我认为它没有得到澄清。