拼接不会改变数组的长度

时间:2018-07-06 18:08:41

标签: javascript

JavaScript array.splice更改数组的长度。但是下面的代码似乎总是在不更改数组长度的情况下拉取数组的前10个元素。这使其陷入无限循环。怎么了?

files = ['a','b','c',....]; // 100 elements
while( files.length ){
    files = files.splice( 0, 10 );
    console.log( files );
}

2 个答案:

答案 0 :(得分:1)

问题与您有关,只需将其删除,因为splice更改了数组。它将返回您分配给数组的已删除元素

files = ['a','b','c','a1','b1','c1','a2','b2','c2','a3','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c','a','b','c']; // 100 elements
while( files.length ){
    files.splice( 0, 10 );
    console.log( files );
}

答案 1 :(得分:1)

问题是splice返回包含已删除元素的数组,然后再次将其分配给files。因此,files数组始终具有10个值,并且条件绝不会为假。您可以像这样使用它:

files = ['a','b','c',....]; // 100 elements
while( files.length ){
    files.splice( 0, 10 );
    console.log( files.length );
    //=> 90, 80, 70, 60, 50, 40, 30, 20, 10, 0
    // after that it will get out of this loop
}

请记住,splice()方法通过删除现有元素来更改数组的内容。因此,如果您需要files进行进一步处理,请先将该值保存在一个临时数组中,然后将该临时数组与splice()一起使用。