Apa cara paling efisien untuk menggabungkan N array objek dalam JavaScript?
Array bisa berubah, dan hasilnya dapat disimpan di salah satu array input.
javascript
arrays
Leonid
sumber
sumber
Jawaban:
Jika Anda menggabungkan lebih dari dua array,
concat()
adalah cara untuk mencari kenyamanan dan kemungkinan performa.Untuk menggabungkan hanya dua array, fakta yang
push
menerima banyak argumen yang terdiri dari elemen untuk ditambahkan ke array dapat digunakan sebagai gantinya untuk menambahkan elemen dari satu array ke akhir array tanpa menghasilkan array baru. Denganslice()
itu juga dapat digunakan sebagai pengganticoncat()
tetapi tampaknya tidak ada keuntungan kinerja dari melakukan ini .Dalam ECMAScript 2015 dan yang lebih baru, ini dapat dikurangi lebih jauh ke
Namun, tampaknya untuk array besar (dari urutan 100.000 anggota atau lebih), teknik melewati array elemen ke
push
(baik menggunakanapply()
atau operator spread ECMAScript 2015) dapat gagal. Untuk array seperti itu, menggunakan loop adalah pendekatan yang lebih baik. Lihat https://stackoverflow.com/a/17368101/96100 untuk detailnya.sumber
a.concat(b)
test case sepertinya tidak perlu membuat salinan arraya
kemudian membuangnya.concat()
umumnya lebih cepat. Untuk kasus menggabungkan array ke array yang ada di tempat,push()
adalah cara untuk pergi. Saya memperbarui jawaban saya.sunting : bukti efisiensi: http://jsperf.com/multi-array-concat/7
edit2 : Tim Supinie menyebutkan dalam komentar bahwa ini dapat menyebabkan penafsir melebihi ukuran panggilan stack. Ini mungkin tergantung pada mesin js, tapi saya juga mendapatkan "Ukuran stack panggilan maksimum terlampaui" di Chrome. Kasus uji:
[].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
. (Saya juga mendapatkan kesalahan yang sama dengan menggunakan jawaban yang saat ini diterima, jadi seseorang mengantisipasi kasus penggunaan tersebut atau membangun perpustakaan untuk orang lain, pengujian khusus mungkin diperlukan tidak peduli solusi mana yang Anda pilih.)sumber
Untuk orang yang menggunakan ES2015 (ES6)
Anda sekarang dapat menggunakan Sintaks Penyebaran untuk menggabungkan array:
sumber
The
concat()
metode yang digunakan untuk menggabungkan dua atau lebih array. Itu tidak mengubah array yang ada, itu hanya mengembalikan salinan dari array yang bergabung.sumber
concat
secara khusus digunakan untuk membuat array baru tanpa mengubah array asli. Jika Anda ingin memperbaruiarray1
, Anda harus menggunakanarray1.push(...array2, ...array3, ...array4)
Gunakan Array.prototype.concat.apply untuk menangani rangkaian beberapa array:
Contoh:
sumber
Jika Anda berada di tengah perpipaan hasilnya melalui peta / filter / semacam dll dan Anda ingin membuat array array, Anda dapat menggunakan
reduce
sumber
Untuk berbagai array dan ES6, gunakan
Sebagai contoh:
sumber
newArr = Array.from(new Set(newArr));
.any[]
? Pengetikan ada - aneh.[].concat.apply([], ...arr)
berkinerja jauh lebih baik pada volume besar.Sekarang kita bisa menggabungkan banyak array menggunakan
ES6
Spread
. Alih-alih menggunakanconcat()
untuk menggabungkan array, coba gunakan sintaks spread untuk menggabungkan beberapa array menjadi satu array yang rata. misalnya:sumber
dipecahkan seperti ini.
sumber
Anda dapat menggunakan situs jsperf.com untuk membandingkan kinerja. Berikut ini tautan ke konser .
Menambahkan perbandingan antara:
dan:
Yang kedua hampir 10 kali lebih lambat di chrome.
sumber
push.apply()
, yang tampaknya lebih cepat daripadaconcat()
di semua browser kecuali Chrome. Lihat jawaban saya.Mudah dengan fungsi concat:
sumber
Berikut adalah fungsi di mana Anda dapat menggabungkan beberapa jumlah array
Contoh -
akan menampilkan
sumber
Gabungkan Array dengan Push:
Menggunakan operator Concat dan Spread:
sumber
Jika Anda memiliki array array dan ingin menggabungkan elemen menjadi satu array, coba kode berikut (Membutuhkan ES2015):
Atau jika Anda menyukai pemrograman fungsional
Atau bahkan lebih baik dengan sintaks ES5, tanpa operator spread
Cara ini berguna jika Anda tidak tahu tidak. array pada waktu kode.
sumber
Dipendekkan dengan ES6.
Ini tidak concat dan unik yang beberapa array;
Demo di codepen
sumber
new Set()
tidak menghapus item yang digandakan. Hapus saja.[].concat(...Array)
di mana 'n' adalah sejumlah array, mungkin array array. . .
var answer = _.reduce (n, fungsi (a, b) {return a.concat (b)})
sumber
Jika hanya ada dua array untuk digabung, dan Anda benar-benar harus menambahkan satu array daripada membuat yang baru, tekan atau putar adalah cara yang harus dilakukan.
Benchmark: https://jsperf.com/concat-small-arrays-vs-push-vs-loop/
sumber
coba ini:
sumber
jika array N didapat dari basis data dan bukan hardcoded, saya akan melakukannya seperti ini menggunakan ES6
sumber