Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

305
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!