[英]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.