解决什么问题
核心:避免只能单个选中、单个修改商品带来的重复操作、效率低的问题
- 不用一个个点勾选、一个个删除、一个个修改选中状态;
- 支持一次性批量结算、批量删除、批量移入收藏、批量修改选中;
- 统一计算选中商品总价、总数量,方便用户核对;
- 前端减少多次重复请求,后端也不用多次处理单条数据,提升体验和性能。
反例:没有批量操作,想买 5 件商品,就要挨个勾选;想删掉 3 件不要的,就要点 3 次删除。
二、应用场景(电商购物车)
- 全选 / 取消全选:一键勾选购物车里全部商品,或者一键取消所有勾选
- 批量删除:勾选多个不要的商品,一次全部删掉
- 批量结算:勾选多个商品,统一去下单结算(最常用)
- 批量移入收藏:勾选多个商品,批量加到收藏夹,暂时不买
- 批量修改规格(次要):少量场景批量改尺码、颜色(不多见)
- 反选:选中当前没勾选的商品,取消已经勾选的
三、怎么使用(前端开发思路,贴合你做的购物车作业)
基础数据结构(购物车数组)
js
let cartList = [
{id:1,name:"商品1",price:100,num:1,isCheck:false},
{id:2,name:"商品2",price:200,num:2,isCheck:false},
{id:3,name:"商品3",price:150,num:1,isCheck:false}
]
isCheck 是核心标记:true = 选中,false = 未选中
1. 单选(单个商品勾选框)
点击单个复选框 → 修改这条数据的 isCheck; 每次单选后,判断:是不是所有商品都选中了,同步更新【全选框】的状态。
2. 全选按钮逻辑
点击全选:
- 如果全选框为 true:循环遍历 cartList,所有 item.isCheck = true
- 如果全选框为 false:循环遍历 cartList,所有 item.isCheck = false
3. 批量删除
先过滤数组,保留 isCheck === false 的商品,覆盖原购物车; 再重新渲染页面。
js
// 批量删除选中商品
cartList = cartList.filter(item=>!item.isCheck)
4. 批量结算
先过滤出选中的商品 cartList.filter(item=>item.isCheck)
- 校验:有没有选中商品,没选中提示 "请选择商品"
- 统计:总数量、总价格
- 把选中商品传给下单接口,提交订单
5. 总价实时计算
每次勾选、取消勾选都重新遍历选中项累加:
js
let totalPrice = 0
cartList.forEach(item=>{
if(item.isCheck){
totalPrice += item.price * item.num
}
})