Instacart:缺货之前,先说清可以怎么替换
Instacart 帮助用户在线选购商店里的商品,由购物者代为采购。它把缺货时的替代偏好放到下单前,让购买者提前表达哪些可以换、哪些宁可退款。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考
集中解析当前替代偏好
为一个购物车实现“当前替代偏好”解析函数。页面显示与订单提交都调用它,避免两处对默认值的理解不同。
- 输入: resolvePreference(orderChoice, savedChoice)。两个参数各为 null 或字符串 best、specific、refund,分别表示未设置、最佳匹配、指定替代和退款。输入保证合法;本题只解析偏好类型,不保存具体替代商品。
- 规则: 本次订单的 orderChoice 非 null 时优先使用它;否则使用非 null 的 savedChoice;两者都为 null 时使用 best。返回 {choice, origin},choice 为最终类型,origin 分别为 order、saved、default,表示取自哪里。函数不修改输入,也不保存状态;refund 是有效选择,不能当成缺省。
- 验收: (refund, best) 返回 {choice:refund, origin:order};(null, refund) 返回 {choice:refund, origin:saved};(null, null) 返回 {choice:best, origin:default};(best, refund) 返回 {choice:best, origin:order}。
- 交付: 用熟悉的语言实现函数,运行四组例子,简述怎样让展示与提交共用同一份规则。无需实现页面、账号或下单。
查看思路
- 先把三个来源的优先级写清楚,并决定在哪里统一选择来源,避免页面与提交各做判断。
- “未设置”只由 null 表示;明确退款与其他选择具有相同的有效性。
- 沿四组例子检查返回的类型和来源,尤其检查主动 best 能否覆盖历史 refund。