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

303
Views
¿Cómo evito un número aleatorio duplicado cuando uso setInterval? (javascript)

He querido generar números aleatorios a través de una función y luego usar setInterval para repetir esa función y darme un número nuevo cada vez.

 function randNum(prevNum) { let randNum = Math.round(Math.random() * 12) //choose a number between 0 and 12 while (randNum == prevNum){ //if the chosen number is the same as prevNum, choose another random number randColor = Math.round(Math.random() * 12) } prevNum = randColor //assign current value to parameter return (prevNum); //return parameter } prevNum = 0, prevNum = setInterval (randNum, 1000, prevNum) //assign returned parameter to current variable, then go back into the function with the new parameter value.

también usando el nodo, por lo que es posible que falten puntos y comas.

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

0

Cuando usa prevNum como un argumento setInterval() , siempre está pasando el valor original de la variable a la función de devolución de llamada. Solo debe usar la variable global directamente en lugar de pasarla como parámetro.

También tiene un error tipográfico, randColor debe ser randNum .

 let prevNum = 0; function randNum() { let newNum while (true) { newNum = Math.round(Math.random() * 12) //choose a number between 0 and 12 if (newNum != prevNum) { break; } } prevNum = newNum //save the current value console.log(prevNum); } let interval = setInterval(randNum, 1000)

El valor de retorno de la función de devolución de llamada no se usa, por lo que no tiene sentido return prevNum; . Y no debe asignar el resultado de setInterval() a su variable numérica: devuelve una ID de temporizador, no el valor de la función.

about 4 years ago · Juan Pablo Isaza Report

0

Podría crear una función que devuelva un iterador y mantenga el estado:

 function randiter(n) { let num = 0; const iter = () => { let cur; do { cur = Math.round(Math.random() * n); } while (cur === num); num = cur; return num; }; return iter; }

La versión anterior toma el número máximo como parámetro. Úsalo así:

 const p12 = randiter(12); for (let i=0; i<20; i++) { console.log(p12()); }

o

 setInterval(() => console.log(p12()), 1000);
about 4 years ago · Juan Pablo Isaza Report

0

yo soy el 3%
(y echo de menos a Pascal)

 let intervalRef = setInterval( ( prev ) => { let newNum; do newNum = Math.round(Math.random() * 12) while( newNum === prev.val ) prev.val = newNum console.log( newNum ) } , 1000, { val: null } ) setTimeout(()=>clearInterval(intervalRef), 20000)

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!