Rumah > Artikel > hujung hadapan web > Gabungkan/gabungkan dua tatasusunan JS menggunakan petua method_javascript yang berbeza
Ini ialah artikel ringkas tentang beberapa petua tentang menggunakan tatasusunan JavaScript. Kami akan menggunakan kaedah yang berbeza untuk menggabungkan/menggabungkan dua tatasusunan JS, serta membincangkan kelebihan/kelemahan setiap kaedah.
Mari kita pertimbangkan dahulu situasi berikut:
Tetapi bagaimana jika a mempunyai 10,000 elemen dan b juga mempunyai 10,000 elemen? C akan mempunyai 20,000 elemen, jadi penggunaan memori a dan b akan berganda.
“Tiada masalah!”, anda berkata. Biarkan mereka menjadi sampah dikutip, tetapkan A dan B kepada batal, masalah selesai!
a = b = null; // 'a' dan 'b' dikitar semula
Haha. Untuk tatasusunan kecil dengan hanya beberapa elemen, ini tiada masalah. Tetapi untuk tatasusunan besar, atau dalam sistem dengan memori terhad yang perlu mengulangi proses ini dengan kerap, ia sebenarnya mempunyai banyak ruang untuk penambahbaikan.
Sisipan gelung
Baiklah, mari salin kandungan satu tatasusunan kepada tatasusunan yang lain, menggunakan: Array#push(..)
Nampaknya mempunyai jejak ingatan yang lebih baik.
Tetapi bagaimana jika tatasusunan a lebih kecil? Atas sebab ingatan dan kelajuan, anda mungkin mahu meletakkan a yang lebih kecil di hadapan b. Tiada masalah, cuma gantikan push(..) dengan unshift(..):
Namun, gelung for memang hodoh dan sukar diselenggara. Bolehkah kita berbuat lebih baik?
Ini adalah percubaan pertama kami, menggunakan Array#reduce:
Bagaimana pula dengan ini:
Had panjang tatasusunan maksimum
Isu utama pertama ialah penggunaan memori telah meningkat dua kali ganda (tentu saja untuk sementara waktu!) dan apa yang dilampirkan pada asasnya ialah menyalin elemen ke tindanan melalui panggilan fungsi. Selain itu, enjin JS yang berbeza mempunyai had pada panjang data yang disalin.
Jadi, jika tatasusunan mempunyai sejuta elemen, anda pasti akan melebihi had timbunan panggilan yang dibenarkan untuk push(...) atau unshift(...). Malangnya, ia akan melakukan kerja yang baik dengan beberapa ribu elemen, tetapi anda perlu berhati-hati untuk tidak melebihi had panjang yang munasabah.
Nota: Anda boleh mencuba splice(...), yang mempunyai masalah yang sama seperti push(...) dan unshift(...).
Ada cara untuk mengelakkan had panjang maksimum ini.