Javascript shift更改数组的长度,以便不执行最后一个元素
在JavaScript中,对于数组,如果使用了pop、shift等方法,那么数组的长度也会改变。在我下面的JS代码中,它从不执行数组中的第三个元素“Ds3”,因为在执行notes.shift()之后,数组的长度变为0,所以它只是跳出for循环,我不知道如何更改代码以便它可以实际执行“Ds3”。希望有人能帮我。先谢谢你 代码1:Javascript shift更改数组的长度,以便不执行最后一个元素,javascript,Javascript,在JavaScript中,对于数组,如果使用了pop、shift等方法,那么数组的长度也会改变。在我下面的JS代码中,它从不执行数组中的第三个元素“Ds3”,因为在执行notes.shift()之后,数组的长度变为0,所以它只是跳出for循环,我不知道如何更改代码以便它可以实际执行“Ds3”。希望有人能帮我。先谢谢你 代码1: $(document).ready(function() { var notes = ['F2', 'As2','Ds3']; for(i = 0; i
$(document).ready(function() {
var notes = ['F2', 'As2','Ds3'];
for(i = 0; i < notes.length; i++) {
$('#_' + notes.shift()).addClass('just_do_it');
alert(notes.length);
}
});
$(文档).ready(函数(){
var注释=['F2'、'As2'、'Ds3'];
对于(i=0;i
对于代码2,我不知道为什么当我将一行代码转换成两行代码时,代码根本不起作用。先谢谢你。
代码2:
$(文档).ready(函数(){
var注释=['F2'、'As2'、'Ds3'];
var计数=0;
对于(i=0;i
由于shift()确实具有破坏性,您只需在循环中使用该迭代的索引,并保持数组不变即可
for(i = 0; i < notes.length; i++) {
// switch from `notes.shift() to notes[i]
$('#_' + notes[i]).addClass('just_do_it');
count++;
alert(notes.length);// length remains unchanged
}
由于shift()确实具有破坏性,您可以在循环中使用该迭代的索引,并保持数组不变
for(i = 0; i < notes.length; i++) {
// switch from `notes.shift() to notes[i]
$('#_' + notes[i]).addClass('just_do_it');
count++;
alert(notes.length);// length remains unchanged
}
是否有要清空该数组的原因?如果你坚持,试着换成一个while循环
var notes = ['F2', 'As2','Ds3'];
var count = 0;
while(notes.length > 0){
var note = notes.shift();
$('#_' + note).addClass('shown');
count++;
alert(notes.length);
}
如果我可以添加的话,在循环数组时也会增加计数。相反,您可以通过如下方式获取数组的长度来立即获取计数var count=notes.length
另外,由于您提到了
pop
和shift
数组方法,您应该签出其他方法,例如forEach
、map
或reduce
是否有清空该数组的原因?如果你坚持,试着换成一个while循环
var notes = ['F2', 'As2','Ds3'];
var count = 0;
while(notes.length > 0){
var note = notes.shift();
$('#_' + note).addClass('shown');
count++;
alert(notes.length);
}
如果我可以添加的话,在循环数组时也会增加计数。相反,您可以通过如下方式获取数组的长度来立即获取计数var count=notes.length
另外,由于您提到了pop
和shift
数组方法,您应该检查其他方法,例如forEach
、map
或reduce
,您也可以尝试:
for (var count = notes.length; count > 0; count--) {
$('#_' + notes.shift()).addClass('just_do_it');
}
或
您也可以尝试:
for (var count = notes.length; count > 0; count--) {
$('#_' + notes.shift()).addClass('just_do_it');
}
或
您在对数组进行更改时正在迭代数组,预期会出现意外行为。每当执行移位时,请确保计数器变量未递增。您在对数组进行更改时正在迭代数组,预期会出现意外行为。无论何时执行移位,请确保计数器变量未递增。谢谢。我不知道为什么它适用于:while循环“但不适用于”for循环“。当我使用while循环时,它确实向我显示了数组的长度为0,因此它应该退出while循环,但它仍然在第三次执行addClass。您不想为'Ds3'执行
addClass
?对我来说,即使使用while循环,代码也只能执行addClass两次,因为notes.shift()将数组长度设置为0,这样它就没有机会第三次执行addClass我想为'Ds3'执行addClass,而您的代码确实执行了,但我不明白为什么会执行,因为while循环和my for循环之间没有区别,forloop
的每一步执行两件事,它增加了索引,并带走阵列中的第一项。因此,在步骤2,索引已从0更改为1,但数组也已从['F2',As2',Ds3']
更改为['As2',Ds3']
,因此它跳过'As2'
,谢谢。我不知道为什么它适用于:while循环“但不适用于”for循环“。当我使用while循环时,它确实向我显示了数组的长度为0,因此它应该退出while循环,但它仍然在第三次执行addClass。您不想为'Ds3'执行addClass
?对我来说,即使使用while循环,代码也只能执行addClass两次,因为notes.shift()将数组长度设置为0,这样它就没有机会第三次执行addClass我想为'Ds3'执行addClass,而您的代码确实执行了,但我不明白为什么会执行,因为while循环和my for循环之间没有区别,forloop
的每一步执行两件事,它增加了索引,并带走阵列中的第一项。因此,在步骤2,索引已从0更改为1,但数组也已从['F2',As2',Ds3']
更改为['As2',Ds3']
,因此它跳过'As2'
,谢谢查理。我想清空数组以供使用。我会深入了解join的情况谢谢你charlie。我想清空数组以供使用。我将深入了解join。