簡體   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