看到这个题目感觉非常有意思。
如果我刚入门前端我可能会这么写,先二层for循环,然后根据数组生成样式代码,然后再给我的座位进行编号,编号生成数组。再给每个座位样式绑定按钮方法,生成一个临时数组在一旁,每次点击会更新数组加入对应的数字或者取消对应的数字,一个数组最大只能10个(对应需求1)。生成数组后,会放在一旁,并用fliter对所有座位进行一个过滤,得到剩下还有哪些座位。
完成需求1之后,在旁边添加一个按钮绑定方法写需求2。这里的需求2,其实不是很明确。有2种可能随机给一个用户分配随机张数的票后再给另一个用户分配随机张数的票。还是,给所有用户乱序排列。反正这2种需求都很简单我就不详细写了,第一种情况是获取下数组长度然后random随机几次,每次random之前去除上1次结果。另一种就是获取名单随机排序。
OK,那么如果不是入门会怎么做呢?我会考虑下扩展性,比如for循环生成影院的样式这一块,如果影院其中的一个位子坏了怎么办?是不是需要在生成后再去除这个特定的座位?。如果哪一天这个系统需要换个影院或者会场怎么办?。我的做法是将for循环改为json格式配置读取,例如:一个10X10的会场,每1排少一个位子,中间有一个十字过道。
那么我会将 0表示为位子,1为过道,2为已有人,3为坏掉的位子。
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0],
然后根据配置表,去生成对应的图片。
如果觉得麻烦去做座位映射,那么直接将第一排改为
[1,2,3,4,5,0,6,7,8,9,10]
这样0为过道,1-10为位置号,0以下座位特殊座位即可,比如-1 坏了的位子, -2 vip 位子特殊人群才能购买。
当影院因为没有收益快倒闭了,或者因为疫情,需要关闭一半的位置怎么办?也是第一排座位示例
[1,-1,3,-1,5,0,6,-1,8,-1,10]
当影院因为一号厅成功增加了小一点二号厅。
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
看到了么,这就变成了只有4排中间一个过道。
OK那么在之前编写的随机座位功能和购买限制功能也能移动到这里使用。
最后给一个大概完成需求的时间(5天左右)1天扯皮,1天等UI,1天写功能,1天测试,1天测试完等上线。如果对接后台功能和样式美化,大概总时间2周(10个工作日)。