簡體   English   中英

推送到for-in循環數組以擴展for-in循環的迭代次數

[英]Pushing to array of for-in loop to extend the number of iterations of that for-in loop

考慮一下Javascript:

var words = ['hello,','how','are'];
for(var word in words) {
    console.log(words[word]);
    if (words[word] == 'are') {
        words.push('you');
    }
}

它輸出:

hello,
how
are

我的期望是它將輸出到控制台:

hello,
how
are
you

因此,似乎迭代次數是由循環開始時的單詞長度設置的,並且由於單詞的長度在循環持續時間內不斷變化,因此無法更新該次數。 任何人都可以想到另一種方法嗎?

您不應該使用for..in遍歷數組。 使用新的for..of如果可用)或跟蹤要迭代的索引。 兩者都將在線迭代(即,對添加的項進行迭代)。 .forEach不會在線迭代。

var words = ['hello,','how','are'];
for (var i = 0; i < words.length; i++) {
    console.log(words[i]);
    if (words[i] == 'are') {
        words.push('you');
    }
}

// ES6
let words = ['hello,','how','are'];
for (let word of words) {
    console.log(word);
    if (word == 'are') {
        words.push('you');
    }
}

使用while循環並遞增/遞減自己的計數。

請注意,在循環內更改要迭代的數組/對象的內容被認為是不好的做法,這恰恰是因為這會導致意外的行為。

您可以創建一個新數組:

var words = ['hello,','how','are'];
var newwords = [];
for(var word in words) {
    console.log(words[word]);
    newwords.push(words[word]);
    if (words[word] == 'are') {
        newwords.push('you');
    }
}
console.log(newwords); //["hello,", "how", "are", "you"]

但是我不確定為什么您的代碼不起作用。

http://jsfiddle.net/n0m27reo/

但是,我偏愛for (var i = 0; i < array.length; i++) ,我認為這也更有效。 它還允許您嘗試完成的任務而無需第二個數組:

http://jsfiddle.net/n0m27reo/1/

var words = ['hello,','how','are'];
for(var i=0; i < words.length; i++) {
    console.log(words[i]);
    if (words[i] == 'are') {
        words.push('you');
    }
}
console.log(words); //["hello,", "how", "are", "you"]

您可以使用for循環來檢查每次迭代中的length ,而不是for in中的for in

var words = ['hello,','how','are'];
for(var i=0; i < words.length; i++) {
    console.log(words[i]);
    if (words[i] == 'are') {
        words.push('you');
    }
}

輸出:

hello,
how
are
you

希望這可以幫助。

老式的方法可以滿足您的需求:

var words = ['hello,','how','are'];
var newwords = [];
for(var word=0; word < words.length; word++) {
    console.log(words[word]);
    if (words[word] == 'are') {
        words.push('you');
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM