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