Estoy tratando de hacer un acorazado como un juego y quiero hacer una función que tome una serie de objetos, luego pase por cada matriz específica en cada objeto y verifique si todos sus elementos son de tipo "cadena". Debajo del contexto, tengo una matriz principal de objetos shipContainer , luego cada objeto tiene su propia matriz. shipContainer = [ obj1, obj2, obj3 ...] obj1.position = [1,2,'hit'] obj2.position = [7,'hit','hit','hit']
ahora mi función se ve así en este momento:
sunkStatus(shipContainer) { const result = shipContainer.every(function (ship) { ship.position.every((elem) => typeof elem == "string"); }); return result; } }El problema donde estoy atascado es que la función devuelve falso sin importar si todos los objArr son solo cadenas o números y cadenas.
const ships = [ {position:[1,2,'hit']}, {position:['hit','hit','hit','hit']}, {position:[3,4,'hit']} ]; function sunkStatus(allShips) { return allShips.map(ship=> ship.position.every(el=> typeof el == "string")); } // alternatively: const allSunk = allShips => allShips.every(ship=> ship.position.every(el=> typeof el == "string")); const status=sunkStatus(ships); console.log(status, "all ships are sunk: ", status.every(s=>s), allSunk(ships)) Mi función sunkStatus() devuelve una matriz con información sobre cada barco. Para verificar el estado general, aplica .every() nuevamente.
O, si solo está interesado en el estado general, por supuesto también puede hacerlo
allShips.every(ship=> ship.position.every(el=> typeof el == "string"));Una función que devuelve verdadero cuando todas las posiciones en la matriz de contenedores de envío son cadenas.
sunkStatus(shipContainer) { return shipContainer.reduce((prep, ship) => { const isString = ship.position.every((pos) => typeof pos === "string"); return prep && isString; }, true); }Encuentre una matriz que no sea String y realice una operación de bit con el valor anterior a través de &&.