react-shopping-cart尺码筛选

本文介绍了如何在React应用中实现购物车的尺码筛选功能。当用户选择尺码时,列表会动态显示对应尺寸的服装,并且在处理多选尺码时避免重复展示。同时,文章探讨了三种不同的JavaScript去重方法,包括filter+indexOf、reduce+includes以及双重循环结合splice或push。最后,强调了在展示商品时需要注意从availableSizes数据中正确返回Size信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们来写react-shopping-cart尺码筛选,先看效果

当点击选择Sizes时,列表只展示拥有该尺寸的衣服

当选择多个尺寸就会展示多种衣服(并不是叠加,而是只要有就展示)

 

但要注意的是,一件衣服会有两个或两个以上的尺寸,所以展示的时候要注意去重 

<h3>Sizes:</h3>
<ul>
   <li v-for="item in Size" :key="item.id">
      <input type="checkbox" :value="item.value" v-model="item.availableSizes">
      <span :class="{'active':item.availableSizes}">{{item.value}}</span>
   </li>
</ul>
const Size=[
  {
    id:0,
    value:"XS",
    availableSizes:false
  },{
    id:1,
    value:"S",
    availableSizes:false
  },{
    id:2,
    value:"M",
    availableSizes:false
  },{
    id:3,
    value:"ML",
    availableSizes:false
  },{
    id:4,
    value:"L",
    availableSizes:false
  },{
    id:5,
    value:"XL",
    availableSizes:false
  },{
    id:6,
    value:"XXL",
    availableSizes:false
  }
]

 注意要return  Size数据

data(){
    return{
      Size
    }
  },
    ul{
      list-style: none;
      height: 0.5rem;
      padding: 0 0.2rem;
      display: flex;
      justify-content: space-around;
      align-items: center;
      li{
        position: relative;
        input{
          opacity: 0;
          position: absolute;
          top: 0.14rem;
          right: 0.12rem;
        }
        span{
          float: left;
          height: 0.4rem;
          width: 0.4rem;
          border-radius: 50%;
          background: #eee;
          line-height: 0.4rem;
          text-align: center;
          font-size: 0.1rem;
          font-weight: 700;
        }
        .active{
          color: #fff;
          background: black;
        }
      }
    }

 availableSizes是JSON里面的数据,也就是商品本身的尺寸

Num(){//商品列表循环Num
      let data = [];//创建一个空数组
      let newtitle = this.Size.filter(item=>item.availableSizes)//将对比后的SIze
      this.list.map(item=>{//遍历
        item.availableSizes.map(a=>{
          if (newtitle.length!=0) {
            newtitle.map(v=>{
              if (a==v.value) {
                return data.push(item)
              }
            })
          }else{
            return data=this.list.map(item=>item)
          }
        })
      })
      // data = new Set(data)//去重 ES6,这种方法在这里不能使用
      let newdata = data.filter((item,index,a)=>{
        return a.indexOf(item) === index
      })//去重
}

给大家普及一些去重方法

1.filter和index of()

2. reduce()和includes()实现去重

 3.双重for循环 + splice() 或 双重for循环 +  push()      (ES5的方法)

今天就到这里。

晚安! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值