Tengo problemas para simplificar una declaración condicional. Se parece a esto:
Hay una matriz de matrices como esta, dados = [[a, b], [c, d]].
a, b, c y d representan números aleatorios en un dado 1 > 6.
Cada matriz en la matriz representa una tirada de dos dados donde la última tirada es [c, d] = [2, 5] por ejemplo,
y la penúltima tirada es [a, b] = [3, 6] por ejemplo.
Ahora, si sacas 2 x 1 seguidos o 2 x 6 seguidos, algo sucede. entonces, a + c || a + d y b + c || b + d no puede ser 2 o 12.
El condicional de abajo funciona, pero creo que si abres la puerta al infierno se ve más bonito.
dados = última tirada = [c, d]
prev = penúltimo rollo = [a, b]
if (dice[0] + prev[0] === 2 || dice[1] + prev[1] === 2 || dice[1] + prev[0] === 2 || dice[0] + prev[1] === 2 && dice[0] + prev[0] === 12 || dice[1] + prev[1] === 12 || dice[1] + prev[0] === 12 || dice[0] + prev[1] === 12){ //something happens here }Yo haría algo como esto:
var combinations = dice.reduce(function(acc, curr) { return acc.concat(prev.map(function(curr2) { return curr + curr2; })); }, []); if (combinations.indexOf(2) !== -1 && combinations.indexOf(12) !== -1) { //something happens here }En ES6 es un poco más corto:
const combinations = dice.reduce((acc, curr) => acc.concat(prev.map(curr2 => curr + curr2)), []); if (combinations.indexOf(2) !== -1 && combinations.indexOf(12) !== -1) { //something happens here }Lo que esto realmente hace es calcular todas las combinaciones (sumas) y luego verificar si una es 2 y la otra es 12.
Salí con una solución más simple más adecuada a su necesidad
const throws1 = [[1, 2], [3, 4]] const throws2 = [[1, 2], [3, 1]] const throws3 = [[1, 6], [6, 1]] const checkCondition = (prev, dice) => [1, 6].every(res => prev.includes(res) && dice.includes(res)) console.log(checkCondition(...throws1)) console.log(checkCondition(...throws2)) console.log(checkCondition(...throws3))La condición solo puede ocurrir cuando dice y prev contienen 1 o 6. Entonces, podemos verificar eso.
let throws = [[5,3],[1,6]]; let prev = throws[0]; let dice = throws[1]; if ((prev.includes(1) && dice.includes(1)) || (prev.includes(6) && dice.includes(6))){ console.log("2 or 12 occurs") } else { console.log("2 and 12 do not occur") }