Estoy trabajando con una matriz, tratando de crear una función que determine qué sitios están disponibles de acuerdo con un tamaño de grupo y una vista determinados, en otras palabras, qué campamentos están disponibles que se ajustan al tamaño del grupo y tienen la vista dada. Obtengo un resultado de 1 en mi matriz, lo cual es correcto, pero no agrega la propiedad de número para el segundo objeto en la matriz de campamentos.
La salida en la matriz que estoy buscando con los argumentos actuales es "[1,5]". Pasé unos 20 minutos jugando con el código tratando de averiguar qué estaba pasando. Intenté cambiar parte de mi lógica, pero parece ser correcta. ¿Por qué exactamente el número del segundo objeto no se inserta en la matriz? ¡Gracias por adelantado!
const campgrounds = [ { number: 1, view: "ocean", partySize: 8, isReserved: false }, { number: 5, view: "ocean", partySize: 4, isReserved: false }, { number: 12, view: "ocean", partySize: 4, isReserved: true }, { number: 18, view: "forest", partySize: 4, isReserved: false }, { number: 23, view: "forest", partySize: 4, isReserved: true }, ]; function findMyCampsites(campgrounds, view, partySize){ let sites = [] for (let i = 0; i < campgrounds.length; i++){ if (campgrounds[i].isReserved === false && campgrounds[i].view === view.toLowerCase() && campgrounds[i].partySize >= partySize) { sites.push(campgrounds[i].number) return sites } else { return 'Sorry, no campsites with that view are available to host your party' } } } console.log(findMyCampsites(campgrounds, 'ocean', 4))Observe que está llamando a return dentro de su instrucción for
En su lugar, debe moverlo hacia fuera:
const campgrounds = [ { number: 1, view: 'ocean', partySize: 8, isReserved: false }, { number: 5, view: 'ocean', partySize: 4, isReserved: false }, { number: 12, view: 'ocean', partySize: 4, isReserved: true }, { number: 18, view: 'forest', partySize: 4, isReserved: false }, { number: 23, view: 'forest', partySize: 4, isReserved: true }, ]; function findMyCampsites(campgrounds, view, partySize) { const sites = []; for (let i = 0; i < campgrounds.length; i++) { if ( campgrounds[i].isReserved === false && campgrounds[i].view === view.toLowerCase() && campgrounds[i].partySize >= partySize ) { sites.push(campgrounds[i].number); } } if (!sites.length) { return 'Sorry, no campsites with that view are available to host your party'; } return sites; } const result = findMyCampsites(campgrounds, 'ocean', 4); console.log(result);Además, recomendaría una solución más funcional usando Array.prototype.find() y Array.prototype.map()
const campgrounds = [ { number: 1, view: 'ocean', partySize: 8, isReserved: false }, { number: 5, view: 'ocean', partySize: 4, isReserved: false }, { number: 12, view: 'ocean', partySize: 4, isReserved: true }, { number: 18, view: 'forest', partySize: 4, isReserved: false }, { number: 23, view: 'forest', partySize: 4, isReserved: true }, ] const findMyCampsites = (campgrounds, view, partySize) => { const sites = campgrounds .filter( (s) => s.isReserved === false && s.view === view.toLowerCase() && s.partySize >= partySize ) .map(({ number: n }) => n) if (!sites.length) { return 'Sorry, no campsites with that view are available to host your party' } return sites } const result = findMyCampsites(campgrounds, 'ocean', 4) console.log(result);