2016-01-23 76 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; 
}