Rumah >hujung hadapan web >tutorial js >Mengapakah `Array.fill()` JavaScript Mencipta Rujukan Daripada Salinan dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah `Array.fill()` JavaScript Mencipta Rujukan Daripada Salinan dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Linda Hamiltonasal
2024-11-30 09:50:15235semak imbas

Why Does JavaScript's `Array.fill()` Create References Instead of Copies, and How Can I Fix It?

Array.fill() dalam JavaScript: A Cautionary Tale of References vs. Values

Array.fill() ialah kaedah JavaScript yang digunakan untuk mengisi tatasusunan dengan nilai yang ditentukan. Walau bagaimanapun, adalah penting untuk memahami bahawa Array.fill() beroperasi pada rujukan dan bukannya nilai.

Masalah: Rujukan lwn. Nilai

Pertimbangkan kod berikut:

let m = Array(6).fill(Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0

Di sini, kami mencipta matriks 6x12 menggunakan Array.fill(). Walau bagaimanapun, apabila kita menetapkan m0 kepada 1, m1 secara tidak dijangka turut menjadi 1. Ini kerana Array.fill() mencipta tatasusunan dalam yang kesemuanya merujuk kepada objek Tatasusunan yang sama.

Tingkah Laku Yang Dijangka: Nilai

Daripada merujuk, kami mungkin mahu menyalin nilai sebaliknya. Dalam erti kata lain, menukar m0 seharusnya tidak menjejaskan m1.

Penyelesaian: Menggunakan Array.from()

Untuk memaksa Array.fill() menyalin nilai dan bukannya rujukan , kita boleh menggunakan Array.from() seperti berikut:

let m = Array.from({length: 6}, e => Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 0 as expected

Array.from() memastikan setiap tatasusunan dalam ialah objek yang berbeza, menghalang perkongsian nilai yang tidak diingini.

Kesimpulan

Apabila menggunakan Array.fill(), ketahui perbezaan antara rujukan dan nilai. Untuk situasi di mana anda ingin menyalin nilai dan bukannya rujukan, pertimbangkan untuk menggunakan Array.from() sebaliknya.

Atas ialah kandungan terperinci Mengapakah `Array.fill()` JavaScript Mencipta Rujukan Daripada Salinan dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn