2016-01-23 86 views
0

我正在通过第一章练习。 4个Eloquent JavaScript。 以下是我迄今为止所做的两个功能。函数输出= NAN

//Takes two number parameters and outputs the range into an array. 

var rangeArray = []; 

    function range(start, end) { 
     for (var i = start; i <= end; ++i) 
      rangeArray.push(i); 
     return rangeArray; 
} 

//Takes the array from above and is supposed to output the sum of the elements of the array. 

function sum(range) { 
    var sumTotal = 0; 
    for (var index = 0; index <= rangeArray.length; ++index) 
     sumTotal += rangeArray[index]; 
    return sumTotal; 
} 

//The above functions are supposed to output the outputs shown below if they work correctly. The first one works, but the second console.log statement gives me an output of NaN. 


console.log(range(1, 10)); 
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 


console.log(sum(range(1, 10))); 
// → 55 

所以,我的第二个功能出了什么问题,但我找不出什么。它是初始参数(范围)吗?或者在某处有语法错误?

下面是我从这些练习中获得这些练习的页面的链接,它们接近页面的底部。 http://eloquentjavascript.net/04_data.html

非常感谢您的帮助!

+1

不要使用<= for循环 - 将其更改为< – jeff

回答

2

你没有创造rangeArrayrange,这些数字都推到了同一个阵列(登录尝试的结果两个range(1, 10)来电;第二个将是1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10)。您还正在访问sum中的rangeArray值,而不是其输入range

也在sum,最后一个元素的索引length - 1,所以你的<=应该是<

range应该是:

function range(start, end) { 
    var rangeArray = []; 
    for (var i = start; i <= end; ++i) 
    rangeArray.push(i); 
    return rangeArray; 
} 

sum应该是:

function sum(range) { 
    var sumTotal = 0; 
    for (var index = 0; index < range.length; ++index) 
     sumTotal += range[index]; 
    return sumTotal; 
} 
+0

真棒,感谢您的解释和视觉。 – Edson

3

for超出数组的长度,所以尝试添加undefinedsumTotal因此NaN

0

在第二个功能尝试循环这样的排

for (var index = 0; index < rangeArray.length; index++) 
0

只是一个小错误。这将工作

function sum(range) { 
    var sumTotal = 0; 
    for (var index = 0; index < range.length; index++) 
     sumTotal += range[index]; 
    return sumTotal; 
} 
1

有两种错误

  • 你迭代高达x.length包容这是不对的
  • 您正在总结(数组中的元素x0x.length-1去)错误的数组(你应该在接收到的参数上工作)

这是第二个功能固定的代码:所以你叫range每次

function sum(range) { 
    var sumTotal = 0; 
    for (var index = 0; index < range.length; ++index) 
     sumTotal += range[index]; 
    return sumTotal; 
} 
0

位迟到了,但是正如其他人躲避到,使用array.length是从零开始的,所以使用<代替<=

var rangeArray = []; 

function range(start, end) { 
    for (var i = start; i <= end; i++) rangeArray.push(i); 
    return rangeArray; 
}; 

function sum(arr) { 
    var sumTotal = 0; 
    for (var index = 0; index < arr.length; index++) sumTotal += arr[index]; 
    return sumTotal; 
}; 

//console.log(range(1, 10)); 
console.log(sum(range(1, 10))); // 55 
0

Yo你没有使用你传递给sum函数的range参数。在求和函数中,不是直接从范围函数返回rangeArry,而是从范围函数返回。

像这样改写和函数。

function sum(range) { 
    var sumTotal = 0; 
    for (var index = 0; index <= range.length; ++index) 
      sumTotal += range[index]; 
     return sumTotal; 
}