repetidos objects elementos ejemplo buscar array agrupar javascript arrays reduce

objects - reduce javascript ejemplo



Usando la función de reducción para devolver una matriz (4)

¿Por qué es que cuando quiero usar la función de inserción dentro de la función de reducción para devolver una nueva matriz, aparece un error? Sin embargo, cuando uso el método concat dentro de la función de reducción, devuelve una nueva matriz sin problemas.

Todo lo que estoy tratando de hacer es pasar una matriz a la función de reducción y devolver la misma matriz.

var store = [0,1,2,3,4]; var stored = store.reduce(function(pV,cV,cI){ console.log("pv: ", pV); return pV.push(cV); },[]);

Esto devuelve un error. Pero cuando uso concat:

var store = [0,1,2,3,4]; var stored = store.reduce(function(pV,cV,cI){ console.log("pv: ", pV); return pV.concat(cV); },[]);

Devuelve la misma matriz.

¿Alguna idea de por qué?


Reducir puede ser útil si necesita devolver una matriz con varios elementos para cada elemento iterado;

var inputs = media.reduce((passedArray, video) => { passedArray.push("-i"); passedArray.push(video.filepath); return passedArray; }, []);

Aquí se está utilizando para construir la matriz de entrada para ffmpeg;

[{name: "bob", filepath: "1.mp4"}, {name: "sue", filepath: "3.mp4"}]

=> ["-i", "1.mp4", "-i", "2.mp4]


Solo para completar, y para la siguiente persona que suceda en esta pregunta, lo que está haciendo normalmente se logra con un docs que, como se indica en los documentos.

el mapa llama a una función de devolución de llamada proporcionada una vez para cada elemento de una matriz, en orden, y construye una nueva matriz a partir de los resultados

Contrasta eso con la descripción de reduce :

El método reduce () aplica una función contra un acumulador y cada valor de la matriz (de izquierda a derecha) para reducirla a un solo valor .

(Énfasis mío) Como puede ver, aunque puede manipular reduce para devolver una nueva matriz, su uso general es reducir una matriz a un solo valor.

Así que para tu código esto sería:

var store = [0,1,2,3,4]; var stored = store.map(function(pV){ console.log("pv: ", pV); return pV; });

Mucho más simple que tratar de reconstruir una nueva matriz usando push o concat dentro de una función de reduce .



push devuelve la nueva longitud de la matriz.

Lo que necesitas es la matriz inicialmente proporcionada.

Así que cambia el código de la siguiente manera.

var store = [0, 1, 2, 3, 4]; var stored = store.reduce(function(pV, cV, cI){ console.log("pv: ", pV); pV.push(cV); return pV; // ********* Important ****** }, []);

concat devuelve la nueva matriz combinando los elementos de la matriz proporcionada y los elementos concatenados. asi funciona