javascript 陣列的深度複製

任俠發表於2016-11-02

一般情況下,使用 “=” 可以實現賦值。但對於陣列、物件、函式等這些引用型別的資料,這個符號就不好使了。

1. 陣列的簡單複製

1.1 簡單遍歷

最簡單也最基礎的方式,自然是迴圈處理。示例:

1.2 變通的複製實現

經常出現在面試題中的取巧方法,是使用 slice 或 contcat 方法實現。示例:

2. 陣列的深度複製

普通的一維陣列且值為非引用型別,使用上述方法是沒有問題的,否則就比較麻煩了。深度複製需要考慮陣列值為各種引用型別的情況。

2.1 使用 JSON 方法

JSON.stringify(array) 然後再 JSON.parse()。示例:

此方法存在對古老瀏覽器的相容性問題。如確需要作相容,可引入如下相容檔案解決:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

注意:如果陣列值為函式,上述方法還是不行的。

2.2 深度複製的完全實現

考慮到多維陣列的巢狀,以及陣列值為物件的情況,可以作如下原型擴充套件(當然寫為普通函式實現也是可以的,原型擴充套件是不建議的方式):

2.3 使用 jQuery 的 extend 方法

如果你在使用 jQuery,那麼最簡單的方法是使用 extend 外掛方法。示例:


 

相關文章