2016-02-23 81 views
0

我試圖從Codewars中解決這個問題,對於我的生活無法弄清楚什麼是錯的。用最大和最小數字的增量數組列表

給定一個數字列表,返回列表,使得每個索引的值增加1,直到最大值。

這是我提出的解決方案,但它不適用於這些數據集:[6,9]和[-1,4]。這裏是一個解決問題的鏈接,如果你想嘗試一下自己:codewars - lario & muigi

function pipeFix(numbers) { 
    var firstNum = numbers[0]; 
    var lastNum = numbers[numbers.length - 1]; 
    var iterations = (lastNum - firstNum) + 1; 
    var arr = []; 
    for (var i = firstNum; i <= iterations; i++) { 
    arr.push(i); 
    } 
    return arr; 
} 

如果你能在正確的方向我會非常感激指向我。

回答

0

發生這種情況是因爲您沒有從最小值增加到最大值。

這個解決方案應該工作:

function pipeFix(numbers) { 
    var max = Math.max.apply(this, numbers); 
    var min = Math.min.apply(this, numbers); 
    var result = [] 
    for (var i = min; i <= max; i++) { 
    result.push(i) 
    } 
    return result; 
} 
0

您的解決方案不起作用的原因是,在for語句的條件是不正確。

對於一組:[6,9]你得到firstNum = 6和lastNum = 9。這部分是好的。問題是iterations變量,在這種情況下是4 在for聲明你從價值6開始,但條件

i <= iterations

說,可變i必須4.你打破這種狀況小於或等於在第一次迭代中,所以你得到的數組是空的。

變化for聲明:

for (var i = firstNum; i <= lastNum; i++) { 
    arr.push(i); 
} 

其實你並不需要iterations變了。

即使您在輸入數組中交換數字,而得到[9,6]而不是[6,9],Elvio Cavalcante的解決方案也可以工作。

+0

謝謝Marcin!答案就在我面前! –