Ada beberapa jawaban yang benar-benar kreatif untuk pertanyaan ini di sini. Berikut adalah solusi sederhana bagi mereka yang baru memulai dengan array. Ini dapat dibuat untuk bekerja sepenuhnya hingga ke browser yang mendukung ECMAScript 3, jika diinginkan.
Ketahui sesuatu tentang sambungan sebelum memulai.
Jaringan Pengembang Mozilla: Array.prototype.splice ()
Pertama, pahami dua bentuk penting dari .splice().
let a1 = [1,2,3,4],
a2 = [1,2];
Metode 1) Hapus elemen x (deleteCount), mulai dari indeks yang diinginkan.
let startIndex = 0,
deleteCount = 2;
a1.splice(startIndex, deleteCount);
Metode 2) Hapus elemen setelah indeks awal yang diinginkan ke akhir array.
a1.splice(2);
Dengan menggunakan .splice(), tujuannya adalah untuk membagi a1menjadi array kepala dan ekor dengan menggunakan salah satu dari dua bentuk di atas.
Menggunakan metode # 1, nilai yang dikembalikan akan menjadi kepala, dan a1ekor.
let head = a1.splice(startIndex, deleteCount);
Sekarang, dalam satu gerakan, satukan kepala, badan ( a2), dan ekor
[].concat(head, a2, a1);
Dengan demikian, solusi ini lebih seperti dunia nyata daripada solusi lain yang disajikan sejauh ini. Bukankah ini yang akan Anda lakukan dengan Lego? ;-) Ini adalah fungsi, dilakukan dengan menggunakan metode # 2.
function insertArray(target, body, startIndex)
{
let tail = target.splice(startIndex);
return [].concat(target, body, tail);
}
let newArray = insertArray([1, 2, 3, 4], ["a", "b"], 2);
Singkat:
function insertArray(target, body, startIndex)
{
return [].concat(target, body, target.splice(startIndex));
}
Lebih aman:
function insertArray(target, body, startIndex)
{
const ARRAY_START = 0,
ARRAY_END = target.length - 1,
ARRAY_NEG_END = -1,
START_INDEX_MAGNITUDE = Math.abs(startIndex);
if (startIndex === ARRAY_START) {
throw new Error("The value for startIndex cannot be zero (0).");
}
if (startIndex === ARRAY_END || startIndex === ARRAY_NEG_END) {
throw new Error("The startIndex cannot be equal to the last index in target, or -1.");
}
if (START_INDEX_MAGNITUDE >= ARRAY_END) {
throw new Error("The absolute value of startIndex must be less than the last index.");
}
return [].concat(target, body, target.splice(startIndex));
}
Keuntungan dari solusi ini meliputi:
1) Premis sederhana mendominasi solusi - isi larik kosong.
2) Tata nama kepala, badan, dan ekor terasa alami.
3) Tidak ada panggilan ganda ke .slice(). Tidak ada pemotongan sama sekali.
4) Tidak .apply(). Sangat tidak perlu.
5) Menghindari rangkaian metode.
6) Bekerja di ECMAScript 3 dan 5 hanya dengan menggunakan varalih-alih letatau const.
** 7) Memastikan bahwa akan ada kepala dan ekor untuk ditampar ke tubuh, tidak seperti banyak solusi lain yang disajikan. Jika Anda menambahkan larik sebelum, atau setelah, batas, Anda setidaknya harus menggunakan .concat()!!!!
Catatan: Penggunaan opearator penyebaran ...membuat semua ini lebih mudah dilakukan.