JavaScript數組深拷貝和淺拷貝的兩種方法
更新時間:2014年04月16日 10:22:09 作者:
在使用JavaScript對數組進行操作的時候,我們經常需要將數組進行備份,事實證明如果只是簡單的將它賦予其他變量,那么我們只要更改其中的任何一個,然后其他的也會跟著改變,這就導致了問題的發(fā)生。
例如這個例子:
復制代碼 代碼如下:
var arr = ["One","Two","Three"];
var arrto = arr;
arrto[1] = "test";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,test,Three
document.writeln("數組的新值:" + arrto + "<br />");//Export:數組的新值:One,test,Three
var arrto = arr;
arrto[1] = "test";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,test,Three
document.writeln("數組的新值:" + arrto + "<br />");//Export:數組的新值:One,test,Three
像上面的這種直接賦值的方式就是淺拷貝,很多時候,這樣并不是我們想要得到的結果,其實我們想要的是arr的值不變,不是嗎?
方法一:js的slice函數
復制代碼 代碼如下:
對于array對象的slice函數,
返回一個數組的一段。(仍為數組)
arrayObj.slice(start, [end])
參數
arrayObj
必選項。一個 Array 對象。
start
必選項。arrayObj 中所指定的部分的開始元素是從零開始計算的下標。
end
可選項。arrayObj 中所指定的部分的結束元素是從零開始計算的下標。
說明
slice 方法返回一個 Array 對象,其中包含了 arrayObj 的指定部分。
slice 方法一直復制到 end 所指定的元素,但是不包括該元素。如果 start 為負,將它作為 length + start處理,此處 length 為數組的長度。如果 end 為負,就將它作為 length + end 處理,此處 length 為數組的長度。如果省略 end ,那么 slice 方法將一直復制到 arrayObj 的結尾。如果 end 出現在 start 之前,不復制任何元素到新數組中。
例子:
復制代碼 代碼如下:
var arr = ["One","Two","Three"];
var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Three
document.writeln("數組的新值:" + arrtoo + "<br />");//Export:數組的新值:One,set Map,Three
方法二:js的concat方法
復制代碼 代碼如下:
concat() 方法用于連接兩個或多個數組。
該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
語法
arrayObject.concat(arrayX,arrayX,......,arrayX)
說明
返回一個新的數組。該數組是通過把所有 arrayX 參數添加到 arrayObject 中生成的。如果要進行 concat() 操作的參數是數組,那么添加的是數組中的元素,而不是數組。
var arr = ["One","Two","Three"];
例子:
復制代碼 代碼如下:
var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Three
document.writeln("數組的新值:" + arrtooo + "<br />");//Export:數組的新值:One,set Map To,Three
相關文章
JavaScript求一個數組中重復出現次數最多的元素及其下標位置示例
這篇文章主要介紹了JavaScript求一個數組中重復出現次數最多的元素及其下標位置,涉及javascript數組元素遍歷、判斷、正則過濾、追加等相關操作技巧,需要的朋友可以參考下2018-07-07
JavaScript中的observables?操作符創(chuàng)建實例
這篇文章主要介紹了JavaScript中的observables?操作符創(chuàng)建實例的相關資料,文章介紹詳細,需要的小伙伴可以參考一下,希望對你有所幫助2022-03-03
Bootstrap彈出框modal上層的輸入框不能獲得焦點問題的解決方法
這篇文章主要介紹了Bootstrap彈出框modal上層的輸入框不能獲得焦點問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
javaScript手機號碼校驗工具類PhoneUtils詳解
這篇文章主要為大家詳細介紹了javaScript手機號碼校驗工具類PhoneUtils,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

