2017-10-28 31 views
1

簡單的問題,我面對的正確方法和訪問多維數組。什麼是JavaScript創建

arr = [[1,2,3],[3,4,5],[6,7,8]]; 
    x = arr[0]; 
    x[0] = 2; //x returns [2,2,3] 

同時ARR也更新爲[2,2,3],[3,4,5],[6,7,8] 我怎樣才能防止this.I不想要更改,爲什麼會發生這種情況?

+0

如果你不希望'arr'值比爲什麼你分配值'改變因爲x = arr [0]不是正在複製,而是通過引用創建數組,所以x [0] = 2' – wrangler

+2

使用'x = arr [0] .slice()'。你通過引用來改變數組,因爲你不會通過將數組賦值給一個變量來創建一個副本。 – Xufox

+1

的可能的複製[爲什麼改變在JavaScript數組影響陣列的副本?](https://stackoverflow.com/questions/6612385/why-does-changing-an-array-in-javascript-affect-copies-的最陣列)[由在JavaScript值複製陣列]的 – Xufox

回答

0

=運算符不會使數據的副本。

=運算符創建一個新的參考相同的數據。

一個簡單的辦法是做分配的x值時,以下幾點:

x = arr[0].slice();

0

,如果你有一個3x3維數組。在尋址單個元素時,將元素稱爲加倍索引符號不會更容易嗎?陣列[2] [1] = 7,陣列[0] [0] = 1,陣列[1] [1] = 4,