Array CopyWithin JavaScript: Sintaks dan Contoh Penggunaan
Method copyWithin
melakukan penyalinan dangkal (shallow copy) bagian array ke lokasi (indeks) lain dalam array yang sama dan mengembalikan hasilnya tanpa memodifikasi panjang array.
Jika Anda ingin menyalin dan menggeser atau menimpa posisi elemen array dengan kinerja tinggi, method ini bisa menjadi solusi.
Pasalnya, copyWithin
bekerja seperti fungsi memmove
di C dan C++. Method ini mengubah array sumber.
Mari kita pelajar lebih lanjut mulai dari sintaks hingga contoh penggunaannya.
Sintaks
copyWithin(target, start, end);
Parameter
target
: indeks berbasis nol untuk menyalin urutan atau menentukan ke indeks berapa elemen yang disalin ditempatkan.start
(opsional): indeks elemen pertama yang akan disalin, default0
.end
(opsional): indeks elemen yang menjadi batas penyalinanstart
, elemen yang berada tepat di indeksend
tidak ikut disalin, default sesuai panjang array (arr.length
).
Nilai Kembalian
Mengembalikan array yang telah dimodifikasi.
Contoh
Menggunakan target
Mari kita lihat contoh penggunaan target
tanpa menentukan start
dan end
.
const arr = ['a', 'b', 'c', 'd', 'e'];
arr.copyWithin(2);
console.log(arr); // [ 'a', 'b', 'a', 'b', 'c' ]
Begini cara kerjanya:
- Karena kita tidak menentukan
start
danend
maka semua elemen akan disalin, jadi ini dia:'a', 'b', 'c', 'd', 'e'
. - Di sini kita menentukan target
2
, jadi tempatkan semua elemen yang disalin tadi mulai dari indeks2
(setelahb
) dari array sumber, maka ini hasilnya[ 'a', 'b', 'a', 'b', 'c', 'd', 'e']
. - Karena hasilnya melebihi panjang array asli, jadi pangkas array tersebut agar sesuai dengan panjang array asli, maka ini hasilnya
[ 'a', 'b', 'a', 'b', 'c' ]
.
Menggunakan target
dan start
Mari kita lihat bagaimana hasilnya jika kita menentukan target
dan start
.
Jika kita menentukan start
maka elemen yang disalin tidak lagi dari elemen pertama, melainkan elemen yang berada tepat di indeks start
, sampai akhir elemen karena di sini kita tidak menentukan end
.
Mari kita lihat contoh berikut.
const arr2 = ['a', 'b', 'c', 'd', 'e'];
arr2.copyWithin(2, 1);
console.log(arr2); // [ 'a', 'b', 'b', 'c', 'd' ]
Begini cara kerjanya:
- Salin elemen mulai dari indeks
1
(start
) sampai elemen terakhir, ini dia:'b', 'c', 'd', 'e'
. - Tempatkan semua elemen tersebut tepat ke indeks
2
(target
), setelahb
, ini hasilnya:['a', 'b', 'b', 'c', 'd', 'e']
. - Karena hasilnya melebihi panjang array asli, pangkas array tersebut agar sesuai panjang array asli, maka hasilnya:
['a', 'b', 'b', 'c', 'd']
.
Menggunakan target
, start
, dan end
Kali ini kita menentukan indeks end
, artinya penyalinan elemen tidak lagi sampai elemen terakhir melainkan sampai elemen yang berada tepat sebelum index end
.
Mari kita lihat contoh berikut.
const arr3 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
arr3.copyWithin(1, 2, 5);
console.log(arr3); // [ 'a', 'c', 'd', 'e', 'e', 'f', 'g' ]
Begini cara kerjanya:
- Salin elemen mulai dari indeks
2
(start
),c
, sampai elemen yang berada tepat sebelum indeks5
(end
),e
, maka ini dia:'c', 'd', 'e'
. - Tempatkan semua elemen tersebut ke indeks
1
(target
), setelaha
, jika ada elemen yang berada tepat di indeks1
dan seterusnya sesuai panjang array yang disalin maka timpa elemen tersebut, maka hasilnya:[ 'a', 'c', 'd', 'e', 'e', 'f', 'g' ]
.
Yang perlu diperhatikan disini, ketika kita menentukan end
, elemen tidak lagi digeser ke kanan. Elemen start
hingga end
bukan dipindahkan, tapi disalin.