關於 JavaScript 中的復制數組


之前在寫掃雷的時候,因為需要用到二維數組,當時就在復制數組這里出現了問題,所以記錄一下。

當我們在需要復制數組的時候一定需要注意,數組是復合的數據類型,直接復制的話,只是復制了指向底層數據結構的指針,而不是克隆一個全新的數組。我們來看例子:

var arr1 = [1, 2, 3]
var arr2 = arr1
arr1[0] = 5

console.log(arr2) // [5, 2, 3]

上面代碼中,arr2 並不是 arr1 的克隆,而是指向同一份數據的另一個指針。修改 arr2,會直接導致 arr1 的變化。

那么如果正確的復制數組呢?可以使用 concat() 用於連接兩個或多個數組。該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。看例子:

var arr1 = [1, 2, 3]
var arr2 = arr1.concat()
arr1[0] = 5

console.log(arr2) // [1, 2, 3]

因為 concat() 返回的是一個副本,所以這個時候改變 arr1 就不會導致 arr2 改變了。

還可以利用 ES6 中的擴展運算符來復制數組

var  arr1 = [1, 2];
// 寫法一
var  arr2 = [...arr1];
// 寫法二
var [...arr2] = arr1;

參考資料:阮一峰ES6入門:擴展運算符的應用


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com