繁体   English   中英

JavaScript - 复制数组不起作用

[英]JavaScript - duplicating array doesn't work

我想制作一个包含重复元素的数组。 例如:

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

当我循环遍历for循环时:

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

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

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

为了只获得一个副本,您可以提前存储长度并仅循环此长度。

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

当您使用向数组添加项目时,长度会增加,这会使for循环添加更多项目,这会增加长度,依此类推......

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

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

或者,如果要改变数组,请使用spread立即推送所有项目:

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

如果将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]); } 

ES6解决方案将使用扩展运算符。 这表现得像一个concat。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM