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

184
Views
¿Por qué esta función devuelve ['y', 'e', 's']?

alguien puede explicarme cómo esta función devuelve ['y','e','s'] en lugar de solo la cadena 'yes'???? el valor de num primero será 8, luego la condición else funcionará, luego num será [5,6,7] y nuevamente la condición else funcionará, luego num finalmente se convierte en una matriz vacía [] que completará la condición if, entonces debería regresar 'sí' pero no lo hace!?

 function ABC(num, ...rest) { if (num < 5) { return 'yes'; } else { return [...ABC(rest)]; } }; console.log(ABC(8, 5, 6, 7));

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

0

Cuando num < 5 devuelve yes .

Si el primer argumento no activa eso, el que yes será devuelto a:

 return [...ABC(rest)];

Donde se extenderá y se colocará en una matriz.

about 4 years ago · Juan Pablo Isaza Report

0

Cuando realiza una llamada recursiva, tiene [...ABC(rest)] que primero ejecuta la función y luego distribuye su resultado en una matriz. Esto es más claro si añadimos una variable intermedia:

 let recursive_result = ABC(rest); return [...recursive_result];

Lo que pretendías hacer era primero esparcir el rest en los argumentos de la función y luego devolver el resultado directamente:

 let recursive_result = ABC(...rest); return recursive_result;

Al solucionar eso, encontramos otro problema, que es que una vez que la matriz está vacía, la función se llamará sin argumentos, y num será undefined , que todavía no es "menos de 5". Eso significa que nunca se alcanzará la declaración if , y seguiremos recurriendo para siempre (hasta que su motor JS se dé por vencido y genere un error).

Al detectar undefined explícitamente, obtenemos el resultado que esperaba:

 function ABC(num, ...rest) { if (num < 5 || typeof num == 'undefined' ) { return 'yes'; } else { return ABC(...rest); } }; console.log(ABC(8, 5, 6, 7));

about 4 years ago · Juan Pablo Isaza Report

0

Si agrega algunos console.log , se vuelve más claro:

 function ABC(num, ...rest) { console.log(`num=`, num, ", rest=", rest) if (num < 5) { console.log(`returning 'yes'`) return 'yes'; } else { console.log(`returning [...ABC(${rest})]`) return [...ABC(rest)]; } }; console.log(ABC(8, 5, 6, 7));

  • Ejecutar 1: num=8 , resto=[5, 6, 7]

Así que entra en else y devuelve [...ABC([5, 6, 7])] . Solo hay un argumento, una matriz. Así que en la ejecución 2:

  • Ejecutar 2: num=[5, 6, 7], resto= []

[5, 6, 7] < 5 ? Falso. Así que va en el else de nuevo. Devuelve [...ABC([])] .

  • Ejecutar 3: num=[] , rest= []

[] < 5 ? Cierto, por extraño que parezca. Entonces ABC([]) devuelve 'yes' .

Pero luego este 'yes' se devuelve a la llamada de función anterior , es decir, [...ABC([])] , que se convierte en [...'yes'] , que es ['y', 'e', 's'] .

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!