如何找到一个数字数组的总和

新手上路,请多包涵

给定一个数组 [1, 2, 3, 4] ,我怎样才能找到它的元素之和? (在这种情况下,总和为 10 。)

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

原文由 akano1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
2 个回答

推荐(使用默认值减少)

Array.prototype.reduce 可用于遍历数组,将当前元素值与之前元素值的总和相加。

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

无默认值

你得到一个 TypeError

 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 问题的答案,因为我认为它没有得到澄清。

原文由 OwChallie 发布,翻译遵循 CC BY-SA 4.0 许可协议

这正是 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

那不是很漂亮吗? :-)

原文由 Florian Margaine 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题