代码之家  ›  专栏  ›  技术社区  ›  Shivanand Sharma

拼接不会更改数组的长度

  •  1
  • Shivanand Sharma  · 技术社区  · 7 年前

    javascript array.splice更改数组的长度。但是下面的代码似乎总是在不改变数组长度的情况下提取数组的前10个元素。这将把它扔进一个无限循环中。发生了什么?

    files = ['a','b','c',....]; // 100 elements
    while( files.length ){
        files = files.splice( 0, 10 );
        console.log( files );
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   palaѕн    7 年前

    问题是 splice 返回包含已删除元素的数组,然后再次将其分配给 files .因此 文件 数组始终有10个值,条件从不为false。你可以这样使用它:

    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() 方法通过移除现有元素来更改数组的内容。所以,如果你需要 文件夹 为了进一步处理,请先将该值保存在临时数组中,然后将该临时数组与 拼接() 是的。

        2
  •  1
  •   NullPointer    7 年前

    你的助理有问题。把它删除是因为 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 );
    }