簡體   English   中英

如果我只對數組 1 應用排序並將 array2 創建為新數組,有人可以解釋為什么 array2 會被排序嗎? 這是 javascript

[英]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時,可能會發生許多事情。 看這里

  • 如果沒有傳遞 arguments,則會創建一個空數組。
  • 如果傳遞了一個參數,並且該參數是一個數字,則會創建一個長度為該數字的新數組。
  • 如果傳遞了一個參數,並且該參數不是數字,則會創建一個新數組,其中只有一個值——傳遞的參數的值。
  • 如果傳遞了多個 arguments,則會創建一個新數組,每個參數都有一個值。

因此,如果您傳遞一個非數字參數,您將創建一個以該參數作為值的新數組。 將數組作為參數傳遞會導致創建一個具有一個值的數組,其中該值是傳遞的數組。

該值是傳遞的數組本身,而不是副本:

 const array1 = [88,66,33,44,11,67,32,56]; const array2 = new Array(array1); console.log(array2[0] === array1);

因此,當您對數組進行排序時(使用array1array2[0]的引用),因為它們引用相同的數組,所以無論您稍后檢查哪個數組,您都會看到排序后的結果。

我希望 array2 未排序

而是正確地復制數組。 不要使用new Array

const array2 = [...array1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM