Salin nilai tatasusunan
P粉002546490
2023-08-20 12:42:44
<p>Apabila menyalin satu tatasusunan kepada tatasusunan lain dalam JavaScript: </p>
<pre class="brush:php;toolbar:false;">var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); // Sekarang, arr1 = ['a','b','c','d']</pre>
<p>Saya menyedari bahawa <code>arr2</code> merujuk tatasusunan yang sama seperti <kod>arr1</kod>, bukan tatasusunan bebas yang baharu. Bagaimanakah cara saya menyalin tatasusunan untuk mendapatkan dua tatasusunan berasingan? </p>
Dalam Javascript, teknik penyalinan dalam bergantung pada elemen dalam tatasusunan. Mari mulakan di sini.
Tiga jenis elemen
Elemen boleh berupa: nilai tersurat, struktur tersurat atau prototaip.
Daripada elemen ini, kita boleh mencipta tiga jenis tatasusunan.
Teknologi salinan dalam bergantung kepada tiga jenis tatasusunan ini
Bergantung pada jenis elemen dalam tatasusunan, kita boleh menggunakan pelbagai teknik untuk melakukan salinan dalam.
Teknologi salinan dalam
Tanda aras
https://www.measurethat.net/Benchmarks/Show/17502/0/deep-copy-comparison
Tatasusunan literal (jenis 1)
Prestasi maksimum boleh dicapai menggunakan
[ ...myArray ]
、myArray.splice(0)
、myArray.slice()
和myArray.concat()
技术来深拷贝只包含字面值(布尔值、数字和字符串)的数组;其中在Chrome中,slice()
的性能最高,在Firefox中,扩展运算符...
.Tatasusunan nilai literal (jenis 1) dan tatasusunan struktur literal (jenis 2)
Anda boleh menggunakan teknik
JSON.parse(JSON.stringify(myArray))
untuk menyalin nilai literal (nilai Boolean, nombor, rentetan) dan struktur literal (tatasusunan, objek), tetapi objek prototaip tidak boleh disalin.Semua tatasusunan (jenis 1, jenis 2, jenis 3)
cloneDeep(myArray)
Lo-dash atau jQuerycloneDeep(myArray)
或 jQuery 的extend(true, [], myArray)
技术来深拷贝所有类型的数组。其中Lodash的cloneDeep()
lanjutan (true, [], myArray)
teknik untuk menyalin tatasusunan dalam semua jenis. Antaranya, teknologicloneDeep()
Lodash mempunyai prestasi tertinggi.cloneDeep()
,但高于extend(true)
.Jadi untuk menjawab soalan ini...
Soalan
Jawapan
Sebab
arr1
是一个包含字面值(布尔值、数字或字符串)的数组,你可以使用上面讨论的任何深拷贝技术,其中slice()
和扩展运算符...
mempunyai prestasi tertinggi.Gunakan ini: