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

133
Views
Devuelve cada elemento de la matriz de forma incremental con cada llamada de función cuando se pasa como devolución de llamada

Tengo una matriz de objetos como: [{}, {}, {}, {}, {}]; También tengo una función que es recursiva y acepta una función como parámetro:

 function recursiveFunction(getResponse) { const result = getResponse(); const conditionMet = check(result); if(conditionMet) { return result; } return recursiveFunction(getResponse); }

¿Cómo puedo crear una función getResponse para que cada vez que se llame en recursiveFunction devuelva la próxima iteración de mi matriz?

Por ejemplo, en cada recursión debería obtener el siguiente objeto en la matriz:

 function getResponse(index) { return array[index ++]; }

Y cuando lo llamo:

 const firstIndex = -1; // Because index ++ in function const result = recursiveFunction(getResponse(firstIndex));

Entiendo por qué solo devuelve el primer valor, pero no estoy seguro de cómo puedo modificarlo para devolver el siguiente índice en la matriz al llamarlo nuevamente.

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

0

La forma de hacer esto en JavaScript sería usar el Protocolo de iteración incorporado:

 const myinput = [ {a:1}, {b:2}, {c:3}, {d:4} ] const it = myinput.values() console.log(it.next()) console.log(it.next()) console.log(it.next()) console.log(it.next()) console.log(it.next())

 {value: {a:1}, done: false} {value: {b:2}, done: false} {value: {c:3}, done: false} {value: {d:4}, done: false} {value: undefined, done: true}

Podría hacer su propia función de iter que devuelva una función como la que describe:

 function iter(iterable) { const it = iterable.values() return () => it.next().value } const inputA = [1,2,3] const inputB = ["a","b","c"] const nextA = iter(inputA) const nextB = iter(inputB) console.log(nextA()) // 1 console.log(nextA()) // 2 console.log(nextB()) // "a" console.log(nextB()) // "b' console.log(nextA()) // 3 console.log(nextB()) // "c" console.log(nextA()) // undefined console.log(nextB()) // undefined

En su programa, deberá verificar si no está undefined para saber cuándo no quedan valores:

 function recursiveCheck(check, getResponse) { const result = getResponse() if (result === undefined) return "not found" else if (check(result)) return "condition met" else return recursiveCheck(check, getResponse) } const output = recursiveCheck(myChcek, iter([{...}, {...}, ...])) console.log(output)

El uso de la recursividad en estos casos particulares significa que el tamaño de su entrada será limitado. Si simplemente usa for..of de todos sus problemas desaparezcan -

 function iterativeCheck(check, iterable) { for (const result of iterable) if (check(result)) return "condition met" return "not found" } const output = iterativeCheck(myCheck, [{...}, {...}, {...}, ...]) console.log(output)

Consulte también Symbol.asyncIterator para saber cómo se puede usar este enfoque en iterables asincrónicos.

about 4 years ago · Juan Pablo Isaza Report

0

Debería pasar la función como argumento, no llamar a la función.

 const result = recursiveFunction(getResponse);

Además, si inicializa el índice como -1 , debe usar ++index , no index++ .

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!