Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

136
Vistas
¿Cómo agrupar una matriz basada en una función específica?

Aquí, soy nuevo en JavaScript. estoy resolviendo preguntas; sin embargo, tengo problemas para comprender el encadenamiento de más de un método. He estado tratando de entender esta solución, pero me tomó mucho tiempo y todavía no lo entiendo.

Entiendo que ingresaré la matriz que necesitaba cambiar de acuerdo con la función específica, que opté. Entiendo todas las funciones de los métodos, pero no entiendo su sintaxis aquí, entonces, ¿alguien puede explicarme cada paso?

 const group_By = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => { acc[val] = (acc[val] || []).concat(arr[i]); return acc; }, {});
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En la menor cantidad de palabras posible.

En primer lugar, calculan una expresión ternaria, aquí verifican si la entrada es una función, si lo es, la pasan tal cual, de lo contrario, crean una función anónima que intenta acceder a la propiedad dada. La función de flecha después de los dos puntos puede parecer un poco confusa, pero sigue siendo solo una función. Toma un argumento llamado val y devuelve la propiedad cuya clave está dentro de la variable fn.

 typeof fn === 'function' ? fn : val => val[fn]

El siguiente paso es crear una nueva matriz con nuevos valores para cada uno de los elementos. El resultado de este paso es solo una lista de valores para agrupar elementos. Por ejemplo, llamarlo a la matriz ["a", "bb"] con fn='length' devolvería [1,2]

 arr.map(typeof fn === 'function' ? fn : val => val[fn])

Luego llaman a la función .reduce en la matriz de salida. El propósito de la función reduce es crear un valor único a partir de todos los elementos iterando lentamente sobre él. Puede notar que el último paso devuelve el valor del acumulador y que se pasa como primer argumento a la función llamada en el siguiente elemento. El objeto vacío al final es solo un valor inicial del acumulador.

 .reduce((acc, val, i) => { ... return acc; }, {});

Y finalmente por el paso que hace la acumulación. Aquí, en primer lugar, el val del resultado del mapa se utiliza para acceder a la propiedad del objeto recién creado. Si el valor no existe, se reemplaza con una matriz vacía || [] . Eso tiene el elemento de la matriz inicial en el mismo índice concatenado en él. Si había algunos elementos, simplemente agrega otros nuevos y reasigna el valor.

 acc[val] = (acc[val] || []).concat(arr[i]);
about 4 years ago · Juan Pablo Isaza Denunciar

0

De acuerdo, lo que entendí de su consulta es que está tratando de encadenar varias funciones juntas.

 function Chained() { // this reference. const _this_ = this this.Function1 = () => // do something and return _this_ this.Function2 = () => // do something here and return _this_ }

Arriba puede ver que la cadena es un objeto simple que devuelve "esto" como contexto. y en contexto, ya tenemos Function1 y Function2. por lo que debido a esto lo siguiente será válido.

 const _ExecuteChained = new Chained() // Now you can run _ExecuteChained.Function1().Function2() and so on.

Ahora llegando a su código.

 const group_By = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => { acc[val] = (acc[val] || []).concat(arr[i]); return acc; }, {});

Aquí solo está ejecutando un bucle en arr y validando si el segundo parámetro es una función o no, si la función lo devuelve tal como está (dado que está usando un map , se almacenará en el índice dado. De lo contrario, simplemente obtenga el valor del función en la tecla dada y devolverla.

Reducir.

en Reducir, está tratando de acumular un valor dado con (contactar o fusionar o extender) valor en un índice dado de arr en esta función de caso.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda