【问题标题】:Adding array elements Javascript添加数组元素Javascript
【发布时间】:2016-12-28 20:46:24
【问题描述】:

为什么这段代码返回 10 而不是 2?

var arrToSum = [2, 4, 10];
function sumArray(array) {
    var result = 0;
    for (var i = array[0]; i < array.length; i++) {
    result += array[i];
    }
  return result;
}
sumArray(arrToSum);

// function returns 10

如果遵循循环逻辑,我会在将 2 添加到 result 变量后结束,因为下一个 i 等于 3 并且循环应该结束。请解释那里发生了什么。

【问题讨论】:

  • 因为i2 运行到2,实际上只将arr[2] (10) 添加到0。我不清楚您对var i = array[0]; 的意图是什么。扩展一点:“因为下一个i 等于3 是的,您只添加一个值,循环在一次迭代后停止,但由于i 开始于2 您添加的是 arr[2],而不是 arr[0]。顺便说一句,如果您想了解您的代码到底在做什么,请设置一个断点,逐步执行您的代码并检查变量。
  • 因为array[2]是10

标签: javascript function loops for-loop sum


【解决方案1】:

for 循环的工作原理:

for (var i = array[0]; i &lt; array.length; i++) {

在循环中,这些是第一次迭代执行后的结果;

第一次迭代; i = 2

var i = array[0]; // i = 2;
result += array[i]; // result = 10;

array[i]array[2],即 10。因此,result 是 10。

第二次迭代; i = 3

array.length 是 3,因为它有 3 个元素。条件 i &lt; array.length; 为假,代码跳出循环,返回结果为 10。

【讨论】:

    【解决方案2】:

    你是从 2 开始(数组[0] 的值),而不是从 0 开始。改变

    for (var i = array[0]; i < array.length; i++) {
    

    for (var i = 0; i < array.length; i++) {
    

    【讨论】:

      【解决方案3】:

      这就是为什么您应该熟悉 javascript 中的函数式编程。 map, filter, reduce 是你的朋友。尤其是map

      尽量避免常规循环,因为它们更容易出错。在您的情况下,您搞砸了计数器变量i

      var sum = [2, 4, 10].reduce((a, b) => a + b, 0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多