javascript - objects - reduce of empty array with no initial value
¿Por qué Array.prototype.reduce() no está tomando una matriz vacía como acumulador? (2)
Debe devolver el filteredArr
desde su función anónima, de modo que se use como el valor previousValue para la próxima llamada
var collection = [3, 5, 11, 23, 1];
// filter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElement) {
if (collectionElement > 10) {
filteredArr.push(collectionElement);
}
return filteredArr;
}, []);
Estoy tratando de filtrar todos los elementos de una matriz que son más grandes que 10 a una nueva matriz. Intencionalmente no estoy usando Array.prototype.filter()
porque quiero aprender el método reduce()
. Aquí está el código con el que estaba jugando
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);
}
}, []);
Esperaba que filteredArr
se inicializara con una matriz vacía en el momento de la primera ejecución de devolución de llamada, como ocurre con muchos ejemplos que se proporcionan here . Pero cuando ejecuto este código, aparece el error Cannot read property ''push'' of undefined
, ¿dónde lo estoy arruinando? ¡Gracias!
Array.prototype.push
devolverá la longitud de la nueva matriz. Necesitas devolver el acumulador. Una forma sucinta de hacerlo es con Array.prototype.concat
, ya que ese método devolverá la matriz:
var collection = [3, 5, 11, 23, 1];
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.concat(collectionElemet);
}
}, []);
Debe devolver el acumulador para que la siguiente iteración pueda usar el valor del acumulador.