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

106
Vistas
Creando una matriz de funciones que devuelven su índice sin bucles.

Me gustaría crear una función que devuelva una matriz de funciones. Cuando se llama a cualquier función de la matriz, el resultado debe ser el índice de esta función en la matriz. La tarea y el desafío son crear esta función sin bucles for. Me estaba moviendo de esta manera, sin embargo, el código no funcionó como esperaba:

 const createArrayOfFunctions = number => { const functionsArray = new Array(number).fill(); return functionsArray.map(element => function() { return functionsArray.indexOf(element); }); };

Esperaba:

 const testArray = createArrayOfFunctions(7); testArray[2](); // 2;

¿Hay alguna forma de lograr el objetivo sin usar for-loops? Lo necesito para un proyecto de estudio.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Primero, usa new Array(number).fill() , que crea una matriz de undefined . Entonces, cuando llamas a testArray(2)() , tu element dentro de tu función de retorno también está undefined . luego trató de encontrar el índice de undefined , devuelve 0. La razón por la que devuelve 0 es porque su functionsArray es una matriz de 7 undefined en su caso, entonces Array.indexOf devolverá la primera coincidencia, y dado que functionArray[0] es undefined , es por eso que siempre devuelve 0 sin importar a qué función llame dentro de su functionArray . ¿Tener sentido?

Hice un pequeño cambio en tu código, prueba esto. Debería funcionar como cabría esperar. No Array.indexOf ni ningún otro método de matriz solo porque solo desea el índice, ¿por qué no considerar usar el índice en su lugar?

Si insiste en que quiere usar Array.indexOf para resolver su problema, tendrá que usar un forloop dentro de createArrayOfFunctions para crear su functionsArray con diferentes elementos (por ejemplo, 0,1,2,3,4...7), porque new Array(number).fill() crea una matriz de undefined , e incluso si hace Array(number).fill(number) , solo crea una matriz de 7 en su caso, por lo que es exactamente lo mismo que un matriz de 7 undefined en su caso. Así que tu método no funcionará. Como mencionó que no hay forloop, es por eso que proporcioné el método usando el índice como se describe anteriormente.

También le recomendaría agregar algo de lógica o crear una función separada para asegurarse de que nadie pueda llamar a testArray fuera de límite, por ejemplo, si crea 7 funciones de matriz, no quiere que las personas puedan llamar a testArray[8] . Espero que esto ayude. déjame saber si tienes alguna confusión.

 const createArrayOfFunctions = (number) => { functionsArray = new Array(number).fill(0); return functionsArray.map((element, index) => { return () => { return index; }; }); }; const testArray = createArrayOfFunctions(7); console.log(testArray[2]()); // 2; console.log(testArray[3]()); // 2; console.log(testArray[1]()); // 2;

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes lograr tu objetivo usando Array.from así:

 const createArrayOfFunctions = length => Array.from({length}, (v, i)=> ()=> i); const arrayOfFunctions = createArrayOfFunctions(10); console.log(arrayOfFunctions[0]()) console.log(arrayOfFunctions[9]()) // last item would be 9

about 4 years ago · Juan Pablo Isaza Denunciar

0

En primer lugar, le sugiero que cambie new Array().fill() a solo [] .

Podemos recrear un bucle for usando un bucle while.

 let x = 0 while (x < 5) { console.log(`five times`) x++ }

Por lo tanto, te sugiero que hagas esto:

 function createarray() { let arrayfunc = [] let i = 0 while(i<10) {arrayfunc.push(new Function('console.log(\' + i + \')\'))} return arrayfunc }
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