with objects initial examples empty ejemplo array javascript arrays reduce

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.