Compruebe si una cadena tiene la misma cantidad de 'x' y 'o'. El método debe devolver un valor booleano y no distinguir entre mayúsculas y minúsculas. La cadena puede contener cualquier carácter.
Alguien publicó su respuesta como esta, pero no entiendo la parte x && x.length. ¿Alguien puede explicar esto?
function XO(str) { let x = str.match(/x/gi); let o = str.match(/o/gi); return (x && x.length) === (o && o.length); }str.match(/x/gi) devuelve una matriz de coincidencias si hay alguna coincidencia. Pero si no hay coincidencias, devuelve null . No puede obtener la length de null , por lo que x && x.length hace uso de un cortocircuito para evitar ese error. Será null si x === null , de lo contrario, será la longitud de la matriz.
Lo mismo ocurre con o && o.length . Entonces, si ambos devuelven coincidencias, compara el número de coincidencias. Si ambos tienen cero coincidencias, se convierte en null === null , lo cual es cierto. Y si solo uno de ellos tiene coincidencias, null no será igual a la duración de las coincidencias.