[英]Unexpected result from array.splice
我創建了一個JavaScript函數,以剔除數組中的項目並返回最終項目。 但這實際上是在不應該從主數組中刪除項目的情況下。
功能:
function oneRemaining(arr) {
tmp = arr;
while (tmp.length > 1) {
tmp.splice(~~(Math.random() * tmp.length), 1);
}
return tmp[0];
}
因此,在運行此命令之后,進入的數組應該仍然相同,因為它從未更改過,但是當我在控制台中運行此命令時,其中只有一項。
為什么輸入數組被更改?
您的數組發生變化是因為:
如果您希望這樣做,請將第二行替換為:
tmp = arr.concat([])
希望這可以幫助。
它正在被更改,因為tmp
是對arr
的引用而不是其副本。 每當您更改引用對象中的某些內容時,它也會同時更改原始對象
數組是javascript中的引用類型,因此以下行不會復制輸入數組,只需將變量tmp分配給輸入數組的引用即可。 最后,您總是在內存中編輯相同的數組。
tmp = arr;
您可以使用arr.slice(0)真正復制您的輸入數組。
(您可能已經錯過了tmp變量聲明中的var in,除非您希望它是全局變量?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.