Saya mencoba untuk mendorong beberapa elemen sebagai satu array, tetapi mendapatkan kesalahan
> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined
Saya mencoba melakukan hal serupa yang akan saya lakukan di ruby, saya berpikir itu apply
adalah sesuatu seperti *
.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
javascript
evfwcqcg
sumber
sumber
Sekarang di ECMAScript2015 (alias ES6), Anda dapat menggunakan operator spread untuk menambahkan beberapa item sekaligus:
Lihat tabel kompatibilitas ES6 Kangax untuk melihat browser apa yang kompatibel
sumber
Anda bisa menggunakan
Array.concat
:sumber
Array.prototype.push.apply(arr1, arr2)
adalah jawaban yang benar, karena menggunakanarr1.concat(arr2)
Anda membuat array baru.arr1 = arr1.concat(arr2)
bukan masalah besar dan terlihat jauh lebih bersih. Mendorong ke array lama atau mengganti array lama dengan yang baru tergantung pada kebutuhan Anda. Jika Anda berurusan dengan elemen 10m + mendorong ke array lama akan bekerja lebih cepat, jika Anda mengelola potongan kecil Anda hampir tidak menemukan perbedaan dalam kecepatan. Kedua opsi tersebut sepenuhnya sah.prototype.push.apply
hanya meneleponpush
sekali. Dan perbedaan di atas tidak perlu tentang kecepatan tetapi operasi di tempat vs membuat array baru. Bagaimana jika saya memiliki metode yang mengambil array dan seharusnya memodifikasinya di tempat? Theconcat
Metode tidak mungkin bekerja, bahkan dengan kode VisionN ini karena tidak akan memodifikasi variabel untuk pemanggil fungsi.a = a.concat(b)
masih merupakan sintaks yang lebih pendek dariArray.prototype.push.apply(arr1, arr2)
Jika Anda ingin alternatif
Array.concat
dalam ECMAScript 2015 (alias ES6, ES2015) yang, seperti itu, tidak mengubah array tetapi mengembalikan array baru Anda dapat menggunakan operator spread seperti:Catatan ini berbeda dari
push
metode karenapush
metode ini mengubah / memodifikasi array.Jika Anda ingin melihat apakah fitur ES2015 tertentu berfungsi di browser Anda, periksa tabel kompatibilitas Kangax .
Anda juga dapat menggunakan Babel atau transpiler serupa jika Anda tidak ingin menunggu dukungan browser dan ingin menggunakan ES2015 dalam produksi.
sumber
Ada banyak jawaban merekomendasikan penggunaan:
Array.prototype.push(a, b)
. Ini cara yang baik, TAPI jika Anda akan memiliki b yang sangat besar, Anda akan memiliki kesalahan stack overflow (karena terlalu banyak argumen). Hati-hati di sini.Lihat Apa cara yang paling efisien untuk menggabungkan N array? untuk lebih jelasnya.
sumber
sumber