Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

313
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda