Ringkasan:
Array.from()
fungsi, dibutuhkan iterable seperti pada input dan mengembalikan array dari iterable.
- Operator penyebaran:
...
dalam kombinasi dengan literal array.
const map = new Map([[ 1, 'one' ],[ 2, 'two' ]]);
const newArr1 = [ ...map ];
const newArr2 = Array.from( map );
console.log(newArr1, newArr2);
Peringatan saat menyalin array:
Ketahuilah fakta bahwa melalui metode di atas hanya salinan dangkal yang dibuat saat kita ingin menyalin larik. Sebuah contoh akan menjelaskan masalah potensial:
let arr = [1, 2, ['a', 'b']];
let newArr = [ ...arr ];
console.log(newArr);
arr[2][0] = 'change';
console.log(newArr);
Di sini, karena larik bersarang, referensi disalin dan tidak ada larik baru yang dibuat. Oleh karena itu, jika kita memutasi larik bersarang dari larik lama, perubahan ini akan tercermin dalam larik baru (karena merujuk ke larik yang sama, referensi telah disalin).
Solusi untuk peringatan:
Kami dapat menyelesaikan masalah memiliki salinan yang dangkal dengan membuat klon yang dalam dari larik menggunakan JSON.parse(JSON.stringify(array))
. Sebagai contoh:
let arr = [1, 2, ['a', 'b']]
let newArr = Array.from(arr);
let deepCloneArr = JSON.parse(JSON.stringify(arr));
arr[2][0] = 'change';
console.log(newArr, deepCloneArr)
Array.from(iterable)
, lihat draft ECMA-262 ed 6 .