推送到 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
因此,迭代次数似乎是由循环开始时的单词长度设置的,并且随着单词长度在循环持续时间内发生变化,它无法更新该数字。谁能想出另一种方法来做到这一点?
使用 while 循环和increment/decrement你自己的计数。
请注意,更改您在循环内迭代的 array/object 的内容被认为是不好的做法,正是因为它会导致意外行为。
您可以创建一个新数组:
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 < 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
:
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
希望对您有所帮助。
您不应使用 for..in
遍历数组。如果可用,请使用新的 for..of
或跟踪要迭代的索引。两者都将迭代 online(即遍历添加的项目)。 .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'];
var newwords = [];
for(var word=0; word < words.length; word++) {
console.log(words[word]);
if (words[word] == 'are') {
words.push('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 循环和increment/decrement你自己的计数。
请注意,更改您在循环内迭代的 array/object 的内容被认为是不好的做法,正是因为它会导致意外行为。
您可以创建一个新数组:
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 < 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
:
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
希望对您有所帮助。
您不应使用 for..in
遍历数组。如果可用,请使用新的 for..of
或跟踪要迭代的索引。两者都将迭代 online(即遍历添加的项目)。 .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'];
var newwords = [];
for(var word=0; word < words.length; word++) {
console.log(words[word]);
if (words[word] == 'are') {
words.push('you');
}
}