[英]Can someone please explain why is array2 get sorted if I only applied sorting on Array 1 and created array2 as a NEW array? This is javascript
let array1 = [88,66,33,44,11,67,32,56]; let array2 = new Array(array1); array1.sort(); console.log(array2);
創建了一個具有隨機值的 array1。 使用 new 關鍵字創建了一個 array2 並使用 array1 對其進行了初始化。 對 array1 進行排序並打印出 array2。 我希望 array2 未排序
傳遞給Array
構造函數的參數是新數組中的元素(除非它是數字)。
當您將array1
傳遞給構造函數時,它不會被克隆。 相反,數組被設置為新數組中的第一項。
如果你想克隆它,你可以傳播這個數組,它將它轉換成一個參數列表, Array
構造函數從中創建一個新數組。
let array1 = [88,66,33,44,11,67,32,56]; let array2 = new Array(...array1); array1.sort(); console.log(array2);
let array2 = new Array(array1);
不制作array1
的副本。 它相當於:
let array2 = [array1];
這將創建一個數組,其第一個元素是對與array1
相同的數組的引用。
隨后對array1
所做的任何修改也會影響array2[0]
,反之亦然。
要制作array1
的淺表副本,請使用:
let array2 = [...array1];
調用new Array
時,可能會發生許多事情。 看這里。
因此,如果您傳遞一個非數字參數,您將創建一個以該參數作為值的新數組。 將數組作為參數傳遞會導致創建一個具有一個值的數組,其中該值是傳遞的數組。
該值是傳遞的數組本身,而不是副本:
const array1 = [88,66,33,44,11,67,32,56]; const array2 = new Array(array1); console.log(array2[0] === array1);
因此,當您對數組進行排序時(使用array1
或array2[0]
的引用),因為它們引用相同的數組,所以無論您稍后檢查哪個數組,您都會看到排序后的結果。
我希望 array2 未排序
而是正確地復制數組。 不要使用new Array
。
const array2 = [...array1];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.