¿Cuál es la forma más limpia de asignar el asiento de una persona mientras se recorren los asientos disponibles cuando, después de asignar el asiento de una persona, el estado de la entrada al cine debe marcarse como no disponible? Estaría abierto a usar métodos lodash también.
const movieTickets = [ { seat: "16B" status: "available" }, { seat: "16c" status: "available" }, { seat: "16D" status: "available" } ] const people = [ { name: "Bob" seat: "" }, { name: "Susan" seat: "" }, { name: "Timmy" seat: "" } ] /** * Current solution * The problem is that ticket is not marked as unavailable, and I'm unsure of the cleanest way to do that, would love suggestions here **/ const assignedPeople = people.map(person => { person.seat = movieTickets.find(ticket => ticket.status === "available").seat return person; });
Actualice su matriz movieTickets
con el mismo proceso.
const movieTickets = [ { seat: "16B", status: "available" }, { seat: "16c", status: "available" }, { seat: "16D", status: "available" } ]; const people = [ { name: "Bob", seat: "" }, { name: "Susan", seat: "" }, { name: "Timmy", seat: "" } ] const assignedPeople = people.map(person => { const node = movieTickets.find(ticket => ticket.status === "available"); person.seat = node.seat; node.status = "unavailable"; return person; }); console.log(assignedPeople); console.log(movieTickets);
Si no desea crear una nueva matriz, puede actualizar la matriz original.
const movieTickets = [ { seat: "16B", status: "available" }, { seat: "16c", status: "available" }, { seat: "16D", status: "available" } ]; const people = [ { name: "Bob", seat: "" }, { name: "Susan", seat: "" }, { name: "Timmy", seat: "" } ] people.forEach(person => { const node = movieTickets.find(ticket => ticket.status === "available"); person.seat = node.seat; node.status = "unavailable"; }); console.log(people); console.log(movieTickets);
Puede lograr fácilmente el resultado usando el mapa y encontrar
const movieTickets = [ { seat: "16B", status: "available" }, { seat: "16c", status: "available" }, { seat: "16D", status: "available" } ]; const people = [ { name: "Bob", seat: "" }, { name: "Susan", seat: "" }, { name: "Timmy", seat: "" } ]; const newPeopleData = people.map((p) => { const isSeatAvailable = movieTickets.find((o) => o.status === "available"); if (isSeatAvailable) { isSeatAvailable.status = "unavailable"; return { ...p, seat: isSeatAvailable.seat }; } return p; }); console.log(newPeopleData); console.log(movieTickets);
/* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }
Asigne el ticket encontrado a una variable. Luego puede marcarlo como no disponible antes de asignar el asiento a la persona.
Además, esto le permite verificar que se encontró un boleto. Su código obtendrá un error si hay más personas que boletos disponibles, porque intentará acceder a la propiedad del seat
de null
.
const movieTickets = [ { seat: "16B", status: "available" }, { seat: "16c", status: "available" }, { seat: "16D", status: "available" } ]; const people = [ { name: "Bob", seat: "" }, { name: "Susan", seat: "" }, { name: "Timmy", seat: "" } ]; const assignedPeople = people.map(person => { let ticket = movieTickets.find(ticket => ticket.status === "available"); if (ticket) { ticket.status = "unavailable"; person.seat = ticket.seat; } return person; }); console.log(assignedPeople);