Sommario:
Array.from()
funzione, richiede un iterabile come in input e restituisce un array dell'iterabile.
- Operatore di diffusione:
...
in combinazione con un array letterale.
const map = new Map([[ 1, 'one' ],[ 2, 'two' ]]);
const newArr1 = [ ...map ];
const newArr2 = Array.from( map );
console.log(newArr1, newArr2);
Avvertenza durante la copia di array:
Sii consapevole del fatto che tramite questi metodi sopra viene creata solo una copia superficiale quando vogliamo copiare un array. Un esempio chiarirà il potenziale problema:
let arr = [1, 2, ['a', 'b']];
let newArr = [ ...arr ];
console.log(newArr);
arr[2][0] = 'change';
console.log(newArr);
Qui, a causa dell'array annidato, il riferimento viene copiato e non viene creato alcun nuovo array. Pertanto, se mutiamo l'array annidato del vecchio array, questa modifica si rifletterà nel nuovo array (poiché si riferiscono allo stesso array, il riferimento è stato copiato).
Soluzione per avvertimento:
Possiamo risolvere il problema di avere copie superficiali creando un clone profondo dell'array usando JSON.parse(JSON.stringify(array))
. Per esempio:
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)
, vedi ECMA-262 ed 6 bozza .