2016-08-01 36 views
2
var array = [3, 4, 6, 5, 9, 10, 21]; 

var divThree = []; 

var loveTheThrees = function (array) { 
    for (i = 0; i = array.length; i++) { 
    if (array[i] % 3 === 0) { 
     amount.push(divThree[i]); 
    } 
    } 
} 

我剛剛學習Javascript,並且對此函數有點麻煩。我可以感覺到我接近,但無法弄清楚我做錯了什麼。製作一個功能,可以從3整除的數組中取整3

+0

注意:你應該寫'for(var i = 0'而不是'for(i = 0' – gcampbell

+0

你的錯誤是什麼?你現在試圖打什麼狀態? – joncodo

回答

1

有不同的解決方法(這裏有其他解答),但是您發佈的代碼中的錯誤是i = array.length正在重置i的值。您需要改用<。你還需要推入正確的數組。

var array = [3, 4, 6, 5, 9, 10, 21]; 

var divThree = []; 

var loveTheThrees = function (array) { 
    for (i = 0; i < array.length; i++) { 
    if (array[i] % 3 === 0) { 
     divThree.push(array[i]); 
    } 
    } 
} 
+0

感謝您的解釋。你能否進一步解釋爲什麼'我=數組。length'重置'i'的值,並使用'<'不?在我的腦海中使用'='會更合適,但是再次,即時通訊新的,所以我不會挑戰你的代碼! –

+0

@ Josh-Harris,'='設置一個值。在你的代碼中,你將它設置爲0,然後再次將其設置爲array.length。你是否想要檢查某件事是否等於別的東西,你可以使用'=='或'==='。同樣,如果你想看看是否大於或小於某個值,則分別使用'>'和'<'。所以你的'for'語句就像是站着說:「將'i'設置爲0,同時將'i'設置爲'array.length',每增加一個循環一次」(是的,我知道中間的一個很奇怪。 )如果使用'<'代替它,它將讀取「Set' i」爲0,而'i'小於'array.length',每增加一個循環一次(續) – amflare

+0

(從上)第二種方式會循環直到'i'增加到小於'array.length'(這是因爲數組是0-索引意味着你已經查看了數組中的每個項目),然後停止循環。我建議你看看這裏的JS操作員,以更深入地瞭解他們的工作方式。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators – amflare

1

在您的代碼中,您分配的是i = array.length而不是條件,因此您的循環是無限的。您需要將=更改爲<。也可以推入dimThree而不是amount

var array = [3, 4, 6, 5, 9, 10, 21]; 
 

 
    var divThree = []; 
 
    
 
    var loveTheThrees = function (array) { 
 
     for (i = 0; i < array.length; i++) { 
 
     if (array[i] % 3 === 0) { 
 
      divThree.push(array[i]); 
 
     } 
 
     } 
 
    } 
 

 
loveTheThrees(array); 
 
divThree.forEach(x => console.log(x));

或者使用filter()功能

var array = [3, 4, 6, 5, 9, 10, 21]; 
 
    var divThree = []; 
 
    
 
    divThree = array.filter(x => x % 3 === 0); 
 

 
divThree.forEach(x => console.log(x));

7

只要使用過濾器()

divThree = array.filter(x => x%3 === 0); 
+0

老實說,我甚至都不知道.filter還有一件事,謝謝! –

1

可使用數組

var array = [3, 4, 6, 5, 9, 10, 21]; 

var output = array.filter(function(num){ 
    return num%3 ==0 
}); 
console.log(output); 
0

.filter你將不得不推右值:

divThree.push(array[i]); 

和:你可以實現一個像循環:

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

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

首先需要將for-loop條件從i=array.length更正爲i < array.length。但在這種情況下更重要 - 您需要考慮以下內容: 您想要將可以被3整除的值添加到名爲divThree的數組中 - 因此正確的語法是<destination-array>.push(<value-to-push>)。所以在這種情況下,如果當前值array[i]是被3除盡,要將其推入稱爲數組divThree所以你做這樣的事情:

for (i = 0; i < array.length; i++) { 
    if (array[i] % 3 === 0) { 
     //here we push array[i] into the array because it is divisible my 3 
     divThree.push(array[i]); 
    } 
    } 

正如你在你的Javascript進步,你會發現,在這種情況下,使用lodash(對於NodeJS應用程序)更容易,因爲它提供了非常好的這些類型的便利功能。

我希望這會有所幫助。

相關問題