Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda