Sto provando a filtrare tutti gli elementi in una matrice che sono più grandi di 10 in una nuova matrice. Non sto intenzionalmente utilizzando Array.prototype.filter()
poiché voglio imparare il metodo reduce()
. Ecco il codice giocavo conPerché Array.prototype.reduce() non sta prendendo una matrice vuota come accumulatore?
var collection = [3, 5, 11, 23, 1];
// fileter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.push(collectionElemet);
}
}, []);
mi aspettavo che sarebbe filteredArr
essere inizializzato con un array vuoto al momento della prima esecuzione callback come accade con molti esempi forniti here. Ma quando eseguo questo codice, ottengo l'errore Cannot read property 'push' of undefined
, dove sto scherzando? Grazie!
Se la condizione è vera - si restituisce un numero, se non è vero - si restituisce un 'indefinito'. Se vuoi semplicemente filtrare - usa 'Array.prototype.filter', il tuo codice attuale così com'è è brutto e fuorviante. – zerkms
@zerkms: Questo è giusto per il codice di produzione, non per l'istruzione/sperimentazione. L'OP afferma chiaramente di conoscere 'filter', ma sta cercando di capire' reduce'. – Amadan
@Amadan, allora è un tentativo debole: ha senso provare a capire le funzioni usando gli scenari per cui sono stati progettati. – zerkms