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

101
Views
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 answers
Answer question

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 Report

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 Report

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 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!