【问题标题】:JavaScript - duplicating array doesn't workJavaScript - 复制数组不起作用
【发布时间】:2018-11-03 12:28:02
【问题描述】:

我正在尝试创建一个包含重复元素的数组。例如:

var myArray = ["one", "two", "five"];

当我在 for 循环中循环时:

for(var i = 0; i < myArray.length; i++){
  myArray.push(myArray[i]);
}

我的浏览器崩溃了!我没有得到任何有意义的错误。有人可以解释为什么会这样吗?

【问题讨论】:

  • 每次调用.push() 都会使myArray.length 增加1。
  • 非常感谢我已经使用 concat 解决了它,但我想了解它为什么会发生 :)

标签: javascript arrays for-loop


【解决方案1】:

您的for 循环永远不会结束,因为每次迭代的长度都会增加。

如果只获取一份副本,您可以提前存储长度并仅循环该长度。

var myArray = ["one", "two", "five"];

for (var i = 0, l = myArray.length; i < l; i++){
    myArray.push(myArray[i]);
}

console.log(myArray);

【讨论】:

    【解决方案2】:

    当你使用 add items 到数组时,长度会增长,这使得 for 循环添加更多的项目,这增加了长度,等等......

    一个简单的解决方案是concat 数组本身:

    var myArray = ["one", "two", "five"];
    
    var result = myArray.concat(myArray);
    
    console.log(result);

    如果你想改变数组,或者使用传播一次推送所有项目:

    var myArray = ["one", "two", "five"];
    
    myArray.push(...myArray);
    
    console.log(myArray);

    【讨论】:

      【解决方案3】:

      如果将 myArray.length 更改为常数,则不会发生此问题。但是,崩溃的原因是每次调用 .push() 都会将数组长度增加 1 无论如何,我认为这次崩溃很有趣,并且可能是一个未处理的错误!

      var myArray = ["one", "two", "five"];
      var l=myArray.length;
      for(var i = 0; i < l; i++){// for example l=3 here
        myArray.push(myArray[i]);
      
      }

      【讨论】:

        【解决方案4】:

        ES6 解决方案是使用扩展运算符。其行为类似于 concat。

        let myArray = ["one" ,"two","five"];
        myArray = [ ...myArray, ...myArray];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-07
          • 2012-04-23
          • 1970-01-01
          相关资源
          最近更新 更多