Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript shift更改数组的长度,以便不执行最后一个元素_Javascript - Fatal编程技术网

Javascript shift更改数组的长度,以便不执行最后一个元素

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

在JavaScript中,对于数组,如果使用了pop、shift等方法,那么数组的长度也会改变。在我下面的JS代码中,它从不执行数组中的第三个元素“Ds3”,因为在执行notes.shift()之后,数组的长度变为0,所以它只是跳出for循环,我不知道如何更改代码以便它可以实际执行“Ds3”。希望有人能帮我。先谢谢你

代码1:

$(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。