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

166
Views
¿Por qué reduce devuelve el número en sí mismo y, como en la programación funcional, reemplaza if y break?

Hay una función simple, su esencia es contar desde un número (n) hasta 0. Pero cuando se usa reduce, la función simplemente no funciona, y no importa cómo la reescriba, devuelve una matriz vacía o indefinida , o el número en sí mismo 2. Primero, creé una matriz que tomará n, luego creé un método de reducción en el que currentValue tomará n y restará 1 de él, después del acumulador toma el número resultante y usando el método push, agregue a la matriz de la lista, pero no entiendo cómo debo agregar una condición de que si el acumulador es igual a 0, entonces la función debe detenerse.

 const countBits = (n) => { let list = [n]; let resultReduce = n.reduce((accumulator, currentValue) => { accumulator = currentValue - 1; list.push(accumulator); }); return resultReduce; }; console.log(countBits([2]));

¿Por qué esto no está funcionando de la manera que pretendía?

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

0

reduce se ejecutará en cada uno de los elementos de la matriz, siendo el accumulator (primer argumento de la función de devolución de llamada) el valor que se devuelve de la iteración anterior de la función de devolución de llamada. Entonces, si no devuelve nada, el accumulator no estará undefined para la próxima iteración.

Si desea contar de n a 0 , reduce no es el camino a seguir (así como el hecho de que en su implementación actual, ni siquiera usa la list que contendría todos sus números almacenados de n a 0 ). Aconsejaría que, en su lugar, simplemente haga un bucle de n a 0 e inserte esos valores en una matriz como esta:

 const countBits = (n) => { let list = []; for (let i = n; i > -1; i--) { list.push(i); } return list; }; console.log(countBits(2));

También tenga en cuenta que cambié ligeramente su sintaxis en la llamada a la función: estaba pasando una matriz con un solo elemento aparentemente innecesariamente, así que simplemente pasé el elemento para simplificar el código.

about 4 years ago · Juan Pablo Isaza Report

0

La respuesta de Jack Bashford es correcta, pero para completar me gustaría señalar que generar un rango de números es una necesidad común. Bibliotecas como Underscore , Lodash y Ramda proporcionan una función lista para usar para este propósito. No tiene que escribir su propia implementación cada vez que necesite algo común y mundano como eso; ahorre tiempo y disfrute del hecho de que puede dedicar su tiempo a algo más innovador.

 console.log(_.range(2, -1, -1));
 <script src="https://underscorejs.org/underscore-umd-min.js"></script>

También en aras de la exhaustividad, consideremos cómo podría implementar una función de range descendente usando reduce , de todos modos. reduce espera una matriz de entrada, aunque también puede aceptar un objeto si usa Underscore o Lodash. Para hacer un uso significativo de la colección de entrada, podríamos generar un número consecutivo para cada elemento de la colección. Para una matriz, por supuesto, podríamos simplemente hacer _.range(collection.length - 1, -1, -1) en su lugar, pero para un objeto, o algo cuya longitud no sepa de antemano, como un generador, usar reduce para este propósito podría tener sentido. La siguiente función mapDownwardsRange hará esto:

 function unshiftNext(array) { const front = array.length ? array[0] : -1; return [front + 1].concat(array); } function mapDownwardsRange(collection) { return _.reduce(collection, unshiftNext, []); } console.log(mapDownwardsRange(['a', 'b', 'c']));
 <script src="https://underscorejs.org/underscore-umd-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!