2015-05-27 259 views
1

在for循環下面我有arr[i] = x * i;我基本上是試圖獲得數字的倍數。我現在有代碼的結果是[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]我不想陣列的第一個元素是0 ..添加一個元素到一個for循環中的數組

var n = 10; 
    var arr = []; 
    var x = 2; 
    for(var i = 0; i < n; i++){ 
     //arr[0] = x; 
     arr[i] = x * i; 
     // arr.push(x += x) 
    } 
    console.log(arr) 

我想能夠做到ARR [0]和看到X。在這種情況下,這將是2(倍數的數字..我不知道數學詞)[2,4,6,8,10,12,14,16,18,20]

我知道問題是2 * 0等於0,所以arr [0] = 0。使第一個元素成爲第二個循環的最好方法是什麼?我正在考慮製作一個if語句。或者使用數組的開始片段的數組方法。我希望有一個更簡單的方法,像改變for循環。

回答

4

有兩種簡單的方法來解決這個問題

  1. 改變循環初值

    var arr = [], 
        x = 2, 
        n = 10; 
    for (var i = 1; i <= n; i++) { // Start with `1` 
        arr.push(x * i); 
    } 
    
  2. 或者,用i下一個值相乘,

    var arr = [], 
        x = 2, 
        n = 10; 
    for (var i = 0; i < n; i++) { 
        arr.push(x * (i + 1));  // Multiply with i + 1 
    } 
    

If you still want to solve it with array index assignment,然後就創建整個數組後取出第一個元素,用Array.prototype.slice,這樣

var n = 10, 
    arr = [], 
    x = 2; 

for (var i = 0; i <= n; i++) { // Note the limits, 0 to <= n 
    arr[i] = x * i; 
} 

console.log(arr); 
// [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ] 

arr = arr.slice(1); 

console.log(arr); 
// [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ] 
+0

我喜歡你的第一個。沒有測試第二個呢。我意識到我可以使用arr .push(),但使用arr [i]並且我沒有定義它是很自然的。在寫這個問題之前,我玩過像初始值一樣的初始值,並且我沒有定義第一個el。我想我的主要問題是我固執地想要使用arr [i]而不是push()。你能否給我一點提醒,爲什麼push更好,所以我會更傾向於在未來使用正確的方法?謝謝你的幫助。 –

+0

@ user2537537在過去,'push'的顯示速度比索引分配要快得多。儘管使用'push'的主要原因是我相信代碼的可讀性。您可能需要檢查[this](http://stackoverflow.com/q/614126/1903116)和[this](http://stackoverflow.com/q/15649899/1903116)。 – thefourtheye

+0

嗯,我猜推只是把最後一個元素放入一個數組後,並不關心我認爲的索引太多。我不想成爲一個負擔,但如果你能告訴我如何用arr [i](索引分配)得到解決方案,這將是有益的。這就是我一開始就計劃解決這個問題的方法,我想看看如果我去索引分配會有多糟糕。我會以任何方式接受你的答案。 –

相關問題