Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

143
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda