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

183
Vistas
elegir la función aleatoria según la condición

Tengo varias funciones y condiciones de javascript. Cada una de las funciones se puede ejecutar solo si las condiciones son verdaderas. Es posible que dos funciones cumplan con las condiciones y, si esto sucede, quiero elegir aleatoriamente una función para ejecutar.

por ejemplo:

foo se ejecutará solo si cond1 es verdadero goo se ejecutará solo si cond2 es verdadero hoo se ejecutará solo si cond3 es verdadero

digamos que cond1=verdadero, cond2=falso cond3=verdadero. Quiero elegir aleatoriamente entre foo y hoo.

¿Cuál es la mejor manera de implementar eso?

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

0

No creo que haya una razón para ponerse elegante aquí. Solo use algunos if s para verificar sus condiciones. Si se aplica una condición, empuje la función correspondiente a una matriz de options posibles. Luego seleccione un valor aleatorio en la matriz y llámelo.

 const foo = () => console.log("foo"); const goo = () => console.log("goo"); const hoo = () => console.log("hoo"); const cond1 = true; const cond2 = false; const cond3 = true; const options = []; if (cond1) options.push(foo); if (cond2) options.push(goo); if (cond3) options.push(hoo); options[Math.floor(Math.random() * options.length)]();

Y para los amigos de la taquigrafía:

 const foo = () => console.log("foo"), goo = () => console.log("goo"), hoo = () => console.log("hoo"), cond1 = true, cond2 = false, cond3 = true, options = [ ...(cond1 ? [foo] : []), ...(cond2 ? [goo] : []), ...(cond3 ? [hoo] : []), ]; options[Math.floor(Math.random() * options.length)]();

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una buena estructura de datos para el trabajo sería una lista de pares [condition, function] donde la condition también es una función. Para ejecutar una función específica, primero filtra la lista ejecutando condiciones y elige un elemento aleatorio de lo que queda:

 funcs = [ [ () => x > 10, () => console.log('one'), ], [ () => x > 20, () => console.log('two'), ], [ () => x > 30, () => console.log('three'), ], ] let randomItem = a => a[Math.floor(Math.random() * a.length)] x = 35 // @TODO handle the edge case when no function matches let pair = randomItem(funcs.filter(p => p[0]())) pair[1]()

about 4 years ago · Juan Pablo Isaza Denunciar

0

"eval" es una buena ayuda para esta suposición;

Por ejemplo, tenemos 5 funciones y el nombre es "f1, f2, f3, f4, f5" y las condiciones son valores booleanos c1, c2, c3, c4, c5

si es aleatorio, seleccione condiciones de suma para probar el programa;

 function f1() { console.log("f1 fired!"); } function f2() { console.log("f2 fired!"); } function f3() { console.log("f3 fired!"); } function f4() { console.log("f4 fired!"); } function f5() { console.log("f5 fired!"); } var c1 = false; var c2 = true; var c3 = false; var c4 = true; var c5 = false; var selectedFunctionNames = []; function test(){ if(c1) selectedFunctionNames.push("f1()"); if(c2) selectedFunctionNames.push("f2()"); if(c3) selectedFunctionNames.push("f3()"); if(c4) selectedFunctionNames.push("f4()"); if(c5) selectedFunctionNames.push("f5()"); if(selectedFunctionNames.length>=1) eval(selectedFunctionNames[Math.floor(Math.random() * selectedFunctionNames.length)]); else console.log("There is no any function have a condition"); }
 <button onclick="test()">Test me</button> <label>Result in the console</label>

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