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

100
Views
Ramda: reduce el anidamiento de paréntesis en la composición

Tengo una matriz como esta:

 const arr = [ ['1 1 1', '', '2 2 2'], ['', '3 3 3', '4 4 4'] ]

y mi objetivo es convertirlo a esta matriz:

 [ [ [1,1,1], [2,2,2] ], [ [3,3,3], [4,4,4] ] ]

Estoy tratando de hacer eso de manera funcional usando la composición de funciones. También estoy usando Ramda.

tengo este codigo

 const filterEmpty = filter(o(not, isEmpty)); const getFinalArr = map( compose( map(map(parseInt)), map(split(' ')), filterEmpty ) ) console.log(getFinalArr(arr))

¿Hay alguna forma de escribirlo con menos anidamiento de map ? Intenté algo como esto:

 const getFinalArr = map( compose( parseInt, map, map, split(' '), map, filterEmpty ) )

Pero, por supuesto, no funcionó.

O si hay otra forma de lidiar fácilmente con matrices anidadas como esta, agradecería aprender sobre eso.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Cuando las cosas comienzan a ponerse largas y confusas, prefiero R.pipe en R.compose y escribir la función donde cada línea representa una transformación:

 const { map, pipe, reject, isEmpty, split } = R const fn = map(pipe( reject(isEmpty), // remove empty items map(split(' ')), // convert string to sub-arrays map(map(Number)), // convert sub-arrays to arrays of numbers )) const arr = [['1 1 1', '', '2 2 2'], ['', '3 3 3', '4 4 4']] const result = fn(arr) console.log(result)
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <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>

about 4 years ago · Juan Pablo Isaza Report

0

También sugeriría considerar la recursividad para este tipo de trabajo.

 const parse = R.pipe(R.split(' '), R.map(Number)); const normalize = R.pipe(R.reject(R.isEmpty), R.map(parse), R.of); const fn = ([head, ...tail]) => normalize(head).concat( tail.length ? fn(tail) : [], ); // == const data = [['1 1 1', '', '2 2 2'], ['', '3 3 3', '4 4 4']] console.log( fn(data), );
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

about 4 years ago · Juan Pablo Isaza Report

0

Podría usar un enfoque ligeramente diferente si echa un vistazo a una solución en Javascriptp puro y la convierte a Ramda.

parse

 const { compose, filter, isEmpty, map, not, o, split } = R, array = [['1 1 1', '', '2 2 2'], ['', '3 3 3', '4 4 4']], resultPure = array.map(a => a .filter(Boolean) .map(s => s .split(' ') .map(Number) ) ), fn = map(compose( map(compose( map(Number), split(' ') )), filter(o(not, isEmpty)) )); console.log(fn(array)); console.log(resultPure);
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <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>

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!