JS遍历对象数组替换属性、分配座位并标记影票不可用的简洁方案
座位分配后自动标记电影票为不可用的实现方案
核心逻辑
你当前的代码问题是仅读取了可用票的座位号,没有修改对应票的状态,导致后续分配永远会拿到同一张座位。由于Array.find返回的是数组中对象的引用,直接修改该对象的status属性就会同步生效到原movieTickets数组,不需要额外遍历处理,是最简洁的实现方式。
原生JS最简实现
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 availableTicket = movieTickets.find(ticket => ticket.status === "available") // 可选边界处理:座位不足时抛出提示 if (!availableTicket) throw new Error('当前无可用座位') person.seat = availableTicket.seat // 直接标记为不可用,改动同步到原电影票数组 availableTicket.status = "unavailable" return person })
Lodash 版本实现
如果要使用lodash,可以用_.find简化查找逻辑,整体逻辑和原生实现一致:
const assignedPeople = people.map(person => { // 用lodash的find匹配属性更简洁 const availableTicket = _.find(movieTickets, { status: "available" }) if (!availableTicket) throw new Error('当前无可用座位') person.seat = availableTicket.seat availableTicket.status = "unavailable" return person })
结果验证
分配完成后打印movieTickets,所有已分配的票status都会自动更新为unavailable,符合需求。
内容的提问来源于stack exchange,提问作者Ash Rhazaly
相关产品推荐
相关产品推荐

