JavaScript的循环结束NaN用于数字加法

时间:2017-01-24 03:49:59

标签: javascript arrays

当我运行这个程序时,我最终得到了NaN;我很感激某些形式的解释,因为我很难过!我有一种奇怪的感觉,它必须对范围做一些事情......

https://jsfiddle.net/Smuggles/evj46a23/

var array = []

var range = function(start, end) {
  for (var count = start; count <= end; count++) {
    array.push(start);
    start += 1;
  }
  console.log(array);
}

var sum = function() {
  var result = 0
  var arrayLength = array.length
  for (var count = 0; count <= arrayLength; count++) {
    result += array[count]
    console.log(result);
  }
}

console.log(sum(range(1, 10)));

2 个答案:

答案 0 :(得分:1)

2件事:

  1. 您需要将for函数中的sum循环更改为< arrayLength而不是<= arrayLength。您正在处理以0索引开头的数组长度。
  2. 您需要从sum函数
  3. 返回结果

    &#13;
    &#13;
    var array = [];
    
    var range = function(start, end) {
      for (var count = start; count <= end; count++) {
        array.push(start);
        start += 1;
      }
    };
    
    var sum = function() {
      var result = 0;
      var arrayLength = array.length;
      for (var count = 0; count < arrayLength; count++) {
        result += array[count];
      }
      return result;
    };
    
    console.log(sum(range(1, 10)));
    &#13;
    &#13;
    &#13;

    给定一个[4,5,6]数组,索引如下:

    0: 4
    1: 5
    2: 6
    

    因此,当您使用数组的长度属性(3)时,您将引用一个不存在的索引,该索引返回undefined。它试图对undefined进行数学运算,这会导致NaN。这就是您必须使用< arrayLength

    的原因

    功能方法:

    这将有助于使这些功能更加纯净&#34;。而不是在函数之外维护状态(使用var array = []),只需返回函数中的值:例如,请参阅以下内容:

    &#13;
    &#13;
    function range(start, end) {
      var arr = [];
      for (var i = start; i <= end; i++) {
        arr.push(i);
      }
      return arr;
    }
    
    function sumArray(array) {
      return array.reduce(function(a, b) {
        return a + b;
      });
    }
    
    console.log(sumArray(range(1, 10)));
    &#13;
    &#13;
    &#13;

    每个函数都接受参数,并简单地返回结果。通过这种方式,您可以更多地使用这个功能&#34;。

答案 1 :(得分:0)

代码评论中的描述

var array = [];

var range = function(start, end) {
  //simplified the loop to remove unnecessary variables
  for (; start <= end; start++) {
    array.push(start);
  }

  return array;
}

var sum = function() {
  var result = 0;
  // move length to scope of the loop
  // change to < rather than <= due to zero index nature of arrays
  for (var count = 0, length = array.length; count < length; count++) {
    result += array[count];
  }

  // return the result from the function
  return result;
}

// gets an array from 1-10
var arr = range(1, 10);
// print the array to the console
console.log(arr);
// print the sum to the console
console.log(sum(arr));