複製數組的值
P粉002546490
2023-08-20 12:42:44
<p>當在JavaScript中將一個陣列複製到另一個陣列時:</p>
<pre class="brush:php;toolbar:false;">var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); // 現在,arr1 = ['a','b','c','d']</pre>
<p>我意識到<code>arr2</code>引用的是與<code>arr1</code>相同的數組,而不是一個新的、獨立的陣列。我該如何複製數組以獲得兩個獨立的數組? </p>
在Javascript中,深拷貝技術取決於陣列中的元素。讓我們從這裡開始。
三種類型的元素
元素可以是:字面值、字面結構或原型。
從這些元素中,我們可以建立三種類型的陣列。
深拷貝技術取決於這三種陣列類型
根據數組中元素的類型,我們可以使用各種技術進行深拷貝。
深拷貝技術
基準測試
https://www.measurethat.net/Benchmarks/Show/17502/0/deep-copy-comparison
字面值數組(類型1)
# 可以使用
[ ...myArray ]
、myArray.splice(0)
、myArray.slice()
和myArray.concat()
技術來深拷貝只包含字面值(布林值、數字和字串)的陣列;其中在Chrome中,slice()
的效能最高,在Firefox中,擴充運算子. ..
的性能最高。字面值數組(類型1)和字面結構數組(類型2)
# 可以使用
JSON.parse(JSON.stringify(myArray))
技術來深拷貝字面值(布林值、數字、字串)和字面結構(陣列、物件),但不能拷貝原型物件。所有陣列(型別1、型別2、型別3)
cloneDeep(myArray)
或jQuery 的extend(true, [], myArray)
技術來深拷貝所有類型的數組。其中Lodash的cloneDeep()
技術性能最高。cloneDeep()
,但高於extend(true )
。所以回答這個問題...
問題
答案
因為
arr1
是一個包含字面值(布林值、數字或字串)的數組,你可以使用上面討論的任何深拷貝技術,其中slice()
和擴充運算子...
的效能最高。使用這個: