Jawaban:
Jika Anda menggabungkan lebih dari dua array, concat()adalah cara untuk mencari kenyamanan dan kemungkinan performa.
var a = [1, 2], b = ["x", "y"], c = [true, false];
var d = a.concat(b, c);
console.log(d); // [1, 2, "x", "y", true, false];
Untuk menggabungkan hanya dua array, fakta yang pushmenerima 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. Dengan slice()itu juga dapat digunakan sebagai pengganti concat()tetapi tampaknya tidak ada keuntungan kinerja dari melakukan ini .
var a = [1, 2], b = ["x", "y"];
a.push.apply(a, b);
console.log(a); // [1, 2, "x", "y"];
Dalam ECMAScript 2015 dan yang lebih baru, ini dapat dikurangi lebih jauh ke
a.push(...b)
Namun, tampaknya untuk array besar (dari urutan 100.000 anggota atau lebih), teknik melewati array elemen ke push(baik menggunakan apply()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.
a.concat(b)test case sepertinya tidak perlu membuat salinan array akemudian membuangnya.
concat()umumnya lebih cepat. Untuk kasus menggabungkan array ke array yang ada di tempat, push()adalah cara untuk pergi. Saya memperbarui jawaban saya.
[].concat.apply([], [array1, array2, ...])
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.)
Anda sekarang dapat menggunakan Sintaks Penyebaran untuk menggabungkan array:
const arr1 = [0, 1, 2],
arr2 = [3, 4, 5];
const result1 = [...arr1, ...arr2]; // -> [0, 1, 2, 3, 4, 5]
// or...
const result2 = [...arr2, ...arr1]; // -> [3, 4, 5, 0, 1, 2]
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.
array1 = array1.concat(array2, array3, array4, ..., arrayN);
concatsecara khusus digunakan untuk membuat array baru tanpa mengubah array asli. Jika Anda ingin memperbarui array1, Anda harus menggunakanarray1.push(...array2, ...array3, ...array4)
Gunakan Array.prototype.concat.apply untuk menangani rangkaian beberapa array:
var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);
Contoh:
var a1 = [1, 2, 3],
a2 = [4, 5],
a3 = [6, 7, 8, 9];
Array.prototype.concat.apply([], [a1, a2, a3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Jika Anda berada di tengah perpipaan hasilnya melalui peta / filter / semacam dll dan Anda ingin membuat array array, Anda dapat menggunakan reduce
let sorted_nums = ['1,3', '4,2']
.map(item => item.split(',')) // [['1', '3'], ['4', '2']]
.reduce((a, b) => a.concat(b)) // ['1', '3', '4', '2']
.sort() // ['1', '2', '3', '4']
Untuk berbagai array dan ES6, gunakan
Array.prototype.concat(...arr);
Sebagai contoh:
const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = Array.prototype.concat(...arr);
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
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 menggunakan concat()untuk menggabungkan array, coba gunakan sintaks spread untuk menggabungkan beberapa array menjadi satu array yang rata. misalnya:
var a = [1,2];
var b = [3,4];
var c = [5,6,7];
var d = [...a, ...b, ...c];
// resulting array will be like d = [1,2,3,4,5,6,7]
Anda dapat menggunakan situs jsperf.com untuk membandingkan kinerja. Berikut ini tautan ke konser .
Menambahkan perbandingan antara:
var c = a.concat(b);
dan:
var c = [];
for (i = 0; i < a.length; i++) {
c.push(a[i]);
}
for (j = 0; j < b.length; j++) {
c.push(b[j]);
}
Yang kedua hampir 10 kali lebih lambat di chrome.
push.apply(), yang tampaknya lebih cepat daripada concat()di semua browser kecuali Chrome. Lihat jawaban saya.
Mudah dengan fungsi concat:
var a = [1,2,3];
var b = [2,3,4];
a = a.concat(b);
>> [1,2,3,2,3,4]
Berikut adalah fungsi di mana Anda dapat menggabungkan beberapa jumlah array
function concatNarrays(args) {
args = Array.prototype.slice.call(arguments);
var newArr = args.reduce( function(prev, next) {
return prev.concat(next) ;
});
return newArr;
}
Contoh -
console.log(concatNarrays([1, 2, 3], [5, 2, 1, 4], [2,8,9]));
akan menampilkan
[1,2,3,5,2,1,4,2,8,9]
Gabungkan Array dengan Push:
const array1 = [2, 7, 4];
const array2 = [3, 5,9];
array1.push(...array2);
console.log(array1)
Menggunakan operator Concat dan Spread:
const array1 = [1,2];
const array2 = [3,4];
// Method 1: Concat
const combined1 = [].concat(array1, array2);
// Method 2: Spread
const combined2 = [...array1, ...array2];
console.log(combined1);
console.log(combined2);
Jika Anda memiliki array array dan ingin menggabungkan elemen menjadi satu array, coba kode berikut (Membutuhkan ES2015):
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = [];
for (let arr of arrOfArr) {
newArr.push(...arr);
}
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Atau jika Anda menyukai pemrograman fungsional
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = arrOfArr.reduce((result,current)=>{
result.push(...current);
return result;
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Atau bahkan lebih baik dengan sintaks ES5, tanpa operator spread
var arrOfArr = [[1,2,3,4],[5,6,7,8]];
var newArr = arrOfArr.reduce((result,current)=>{
return result.concat(current);
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Cara ini berguna jika Anda tidak tahu tidak. array pada waktu kode.
Dipendekkan dengan ES6.
new Set([].concat(...Array));
Ini tidak concat dan unik yang beberapa array;
new Set()tidak menghapus item yang digandakan. Hapus saja. [].concat(...Array)
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/
coba ini:
i=new Array("aaaa", "bbbb");
j=new Array("cccc", "dddd");
i=i.concat(j);
jika array N didapat dari basis data dan bukan hardcoded, saya akan melakukannya seperti ini menggunakan ES6
let get_fruits = [...get_fruits , ...DBContent.fruit];