Estoy tratando de codificar una función en mi juego de cartas para verificar si las primeras 2 cartas tienen 2 de los siguientes 3 valores: 6 , 7 u 8 , es decir, 6&7 , 7&8 o 6&8 .
En aras de ser específico: no quiero que return true si son 2 del mismo valor, pero imagino que podría hacerse con && card1Value!==card2Value agregado a las condiciones de la declaración lógica.
A partir de ahí, tendré que hacerlo para que card3Value se verifique en busca del valor faltante.
Yo personalmente lo dividiría un poco:
function threeCardsAreValid(card1, card2, card3) { if(!twoCardsAreValid(card1, card2)) return false if (cardIs6Or7Or8(card3) && card3 !== card1 && card3!== card2) return true return false } function twoCardsAreValid(card1, card2) { if (cardIs6Or7Or8(card1) && cardIs6Or7Or8(card2) && card1 !== card2) { return true } return false } function cardIs6Or7Or8(card) { return (card === 6 | card === 7 | card === 8) }Lo que personalmente haría es filtering the array y creating a set para ver si no hay duplicados.
Entonces, si la matriz de resultados tiene una longitud superior a 2, entonces al menos 2 de las 3 cartas son válidas.
function checkHand(card1, card2, card3){ const arr = [card1,card3,card2] const validHands = [6,7,8] const validHandsFilteredWithoutDuplicates = [...new Set(arr.filter(x => validHands.includes(x)))] return validHandsFilteredWithoutDuplicates.length >= 2 } console.log(checkHand(6,7,9)) // true console.log(checkHand(1,2,3)) // false console.log(checkHand(7,7,4)) // false console.log(checkHand(6,7,8)) // true