vue的数组 模糊查询与排序内容

首先我们回忆一下数组的遍历

<ul>
   <li v-for="(item,index) in personList" :key="item.id">
       <!-- key是不存在的,就是用来给dom树遍历的 -->
       idnex:{{ index }},id:{{ item.id }},名字:{{ item.name }} 年龄{{item.age}}
   </li>
 </ul>
 遍历对象
 <ul>
     <li v-for="(value,k) in car" :key="k">
         对象名{{k}}--对象值{{value}}
     </li>
 </ul>

我们现在有两个需求,给personlist模糊查询和升序降序排序

personLists:[
       {
            id:001,
            name:"马冬梅",
            age:11
        },
        {
            id:002,
            name:"马保国",
            age:32
        },
        {
            id:003,
            name:"马蜂窝",
            age:22
        },
        {
            id:004,
            name:"吴钱",
            age:12
        },
   ]

对于模糊查询我们同样有两种方法,通过computed计算属性和watch检测属性来设定

<input type="text" placeholder="请输入名字,模糊查询名字" v-model="keyword" @keyup="showInfo">
watch:{//用监听器的方法来模糊查询
    'keyword':{
           immediate:true,//需要找一遍空值才显示,这里的意思是初始化的时候执行这个监听一次
           handler(val){
               this.personList=this.personLists.filter((p)=>{  
               //filter过滤的意思,这个是过滤函数,将每一项符合结果的值返回到personList                        
                   return p.name.indexOf(val)!==-1
               })
           } 
       },
  },

用计算属性实现,所谓计算属性,自己百度一下,或者看一下我的推文

computed:{
      filPerson(){//用计算属性来模糊查询,并通过改动排序属性来排序
          const arr=this.personLists.filter((p)=>{  
          //filter过滤的意思,这个是过滤函数,将每一项符合结果的值返回到arr                        
              return p.name.indexOf(this.keyword)!==-1
          })
          
          return arr;
      }
 },

至于降序和升序,我们可以设定一个值为sortType,sortType为0原顺序 1降序 2升序,通过这种方法,让计算属性根据sortType的变化重新对数组的内容进行排列

computed:{
  filPerson(){//用计算属性来模糊查询,并通过改动排序属性来排序
      const arr=this.personLists.filter((p)=>{  //filter过滤的意思,这个是过滤函数,将每一项符合结果的值返回到                        
          return p.name.indexOf(this.keyword)!==-1
      })
      //判断一下是否需要排序
      let t=0;
      if(this.sortType !==0){
      //如果要得到自己想要的结果,不管是升序还是降序,就需要提供比较函数了
      //该函数比较两个值的大小,然后返回一个用于说明这两个值的相对顺序的数字。
      //比较函数应该具有两个参数 a 和 b,其返回值如下:
      //若 a 小于 b,即 a - b 小于零,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于零的值,数组将按照升序排列。
      //若 a 等于 b,则返回 0。
      //若 a 大于 b, 即 a - b 大于零,则返回一个大于零的值,数组将按照降序排列。
          arr.sort((p1,p2)=>{
              console.log("id的值"+t+"这个是p1"+p1.name+"这个是p2"+p2.name);
              t++;
              return this.sortType===1 ?p2.age-p1.age: p1.age-p2.age
          })
      }
      return arr;
  }
},
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Vue3中,实现数组模糊查询有多种方法。其中一种方法是通过computed计算属性来实现。你可以在computed中定义一个名为filPerson的计算属性,使用filter方法对personLists数组进行过滤,返回符合条件的结果。具体代码如下: ```javascript computed: { filPerson() { const arr = this.personLists.filter((p) => { return p.name.indexOf(this.keyword) !== -1; }); return arr; } }, ``` 另一种方法是通过watch监听属性来实现模糊查询。你可以在watch中监听keyword属性的变化,在handler函数中使用filter方法对personLists数组进行过滤,并将结果赋值给personList。具体代码如下: ```javascript watch: { 'keyword': { immediate: true, handler(val) { this.personList = this.personLists.filter((p) => { return p.name.indexOf(val) !== -1; }); } } }, ``` 这两种方法都可以实现数组模糊查询,你可以根据自己的需求选择其中一种方法来使用。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [vue数组 模糊查询排序内容](https://blog.csdn.net/weixin_45180205/article/details/119777567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Vue实现模糊查询:filter()](https://blog.csdn.net/a1598452168YY/article/details/127958248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值