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

309
Vistas
Convierta una matriz de matrices en un objeto de matrices, usando ramda

Dada una matriz de datos 2d o 3d. ¿Cómo se puede crear una función que convierta los datos en objeto de matrices, donde el índice interno se asigna a x, y o z dependiendo de si el índice es 0, 1 o 2 respectivamente? Por ejemplo:

 // 2d const inputData2d = [ [-1, 4], [3, 6], [9, -8], ] const outputData2d = { x: [-1, 3, 9], y: [4, 6, -8], } // 3d const inputData3d = [ [-1, 4, 5], [3, 6, 2], [9, -8, 5], ] const outputData3d = { x: [-1, 3, 9], y: [4, 6, -8], z: [5, 2, 5], }

La función también debería poder manejar datos 2d y 3d, comportándose como se esperaba. He explorado el uso pipe y assoc pero hasta el momento no he tenido suerte.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Con Ramda, puede transponer la matriz de matrices y luego usar R.zipObj para combinarla con las claves. R.zipObj trunca las matrices comprimidas al más corto de los dos, por lo que puede proporcionar ['x', 'y', 'z'] , y se truncaría a ['x', 'y'] para el 2d datos.

 const { pipe, transpose, zipObj } = R const fn = pipe(transpose, zipObj(['x', 'y', 'z'])) const inputData2d = [[-1,4],[3,6],[9,-8]] const inputData3d = [[-1,4,5],[3,6,2],[9,-8,5]] console.log(fn(inputData2d)) console.log(fn(inputData3d))
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Y la misma idea funciona con lodash, aunque es más detallado. Deberá usar _.unzip() en lugar de R.transpose, y seleccionar claves con valores usando _.pickBy() :

 const { flow, unzip, zipObject, pickBy } = _ const fn = flow( unzip, arr => zipObject(['x', 'y', 'z'], arr), obj => pickBy(obj) ) const inputData2d = [[-1,4],[3,6],[9,-8]] const inputData3d = [[-1,4,5],[3,6,2],[9,-8,5]] console.log(fn(inputData2d)) console.log(fn(inputData3d))
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Y puede eliminar parte de la verborrea con Lodash/fp:

 const { flow, unzip, zipObject, pickBy, identity } = _ const fn = flow( unzip, zipObject(['x', 'y', 'z']), pickBy(identity) ) const inputData2d = [[-1,4],[3,6],[9,-8]] const inputData3d = [[-1,4,5],[3,6,2],[9,-8,5]] console.log(fn(inputData2d)) console.log(fn(inputData3d))
 <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Primero, transponga la entrada y luego comprímala en un objeto .

 const matrixToTransposedObject = R.compose( R.zipObj(["x", "y", "z"]), R.transpose ); const inputData2d = [ [-1, 4], [3, 6], [9, -8], ]; const outputData2d = matrixToTransposedObject(inputData2d); console.log(outputData2d); const inputData3d = [ [-1, 4, 5], [3, 6, 2], [9, -8, 5], ]; const outputData3d = matrixToTransposedObject(inputData3d); console.log(outputData3d);
 <script src="https://unpkg.com/ramda@0.27.1/dist/ramda.min.js"></script>

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