Javascript 推送到for-in循环数组以扩展for-in循环的迭代次数

Javascript 推送到for-in循环数组以扩展for-in循环的迭代次数,javascript,arrays,for-in-loop,Javascript,Arrays,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 因此,迭代次数似乎是由循环

在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

因此,迭代次数似乎是由循环开始时的单词长度设置的,并且随着单词长度在循环期间的变化,迭代次数无法更新。有人能想出另一种方法吗?

使用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"]
但我不确定你的代码为什么不起作用

但是,我倾向于使用
for(var I=0;I
,我认为这也更有效。它还允许您在不需要第二个阵列的情况下尝试完成的任务:

var words=['hello','how','are'];
for(var i=0;i
您可以使用
for
循环来检查每次迭代中的
长度,而不是
for

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

希望这有帮助。

您不应该在
中使用
for..来迭代数组。使用新的
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');
    }
}
var words=['hello','how','are'];
for(var i=0;i
传统的方法可以满足您的需求:

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');
    }
}
var words=['hello','how','are'];
var newwords=[];
for(var word=0;word
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');
    }
}
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');
    }
}