Voglio costruire rapidamente un array di n
lunghezza utilizzando il costruttore di array Array()
e quindi eseguire il loop sull'array risultante.Utilizzare forEach per eseguire il loop su Array (n), matrice di valori non definiti
Per MDN's docs:
Se l'unico argomento passato al costruttore Array è un intero tra 0 e 2 -1 (compreso), questa restituisce un nuovo array JavaScript con lunghezza impostata quel numero. Se l'argomento è qualsiasi altro numero, viene generata un'eccezione RangeError .
Presumibilmente, l'esecuzione di Array(5)
crea una matrice con una lunghezza di 5, che esegue.
var arr = new Array(5);
console.log(arr); // [undefined x 5]
console.log(arr.length); // 5
Tuttavia, quando provo ad anello sulla matrice risultante e disconnetterò i valori o l'indice, non succede nulla.
arr.forEach(function(v, i) { console.log(v, i); });
// nothing logs to the console
In alternativa, se uso un array letterale, e cerco di ciclo sui valori, si registra come previsto:
[undefined, undefined].forEach(function(v, i) { console.log(v, i); });
// undefined 0
// undefined 1
Perché non è possibile ciclare su una matrice creata dal costruttore Array?
This answer spiega alcune delle stranezze del browser che si verifica con map
, ad esempio:
arr.map(function(v, i) { return i; }) // returns [undefined x 5]
Ma io sono particolarmente interessato perché il ciclo forEach
non iterare affatto il valori.
'[,,] foreach (console.log.bind (console, 'Log:'))' inoltre sembra rotto :) –
Ma 'Array.apply (null, nuova Array (5)). ForEach (console.log.bind (console)) 'ok –
È uguale a [JavaScript" new Array (n) "e" Array.prototype.map "weirdness] (http: // stackoverflow .com/q/5501581/1529630), ma con 'forEach'. – Oriol