• 蓝桥杯前端Web赛道-输入搜索联想


    蓝桥杯前端Web赛道-输入搜索联想

    题目链接:1.输入搜索联想 - 蓝桥云课 (lanqiao.cn)

    题目要求:

    在这里插入图片描述

    题目中还包含effect.gif 更详细的说明了需求

    那么观察这道题需要做两件事情

    • 把表头的每一个字母进行大写
    • 进行模糊查询

    这里我们会用到几个js函数,slice()includes()filter()toUpperCasetoLowerCase

    Array.prototype.slice() - JavaScript | MDN (mozilla.org)

    Array.prototype.includes() - JavaScript | MDN (mozilla.org)

    Array.prototype.filter() - JavaScript | MDN (mozilla.org)

    String.prototype.toUpperCase() - JavaScript | MDN (mozilla.org)

    String.prototype.toLowerCase() - JavaScript | MDN (mozilla.org)

    以上链接可以让大家再复习一下这三个函数的用法,这里我分享一个小技巧,如果你实在记不住对于slice()的用法

    可以直接在网页使用f12,在控制台上直接输入代码,会有非常清楚的提示,下面是动画演示,其实其他的函数也可以靠这个方法来试出它的用法,但是前提是你知道过这个函数怎么用,这只是起到一个让记忆回笼的作用

    在这里插入图片描述

    那么我们先完成第一个要求:将表头的首字母变成大写

    思路如下,将原先单词的第一个字母变成大写字母,然后把剩下的字母都拼接在一起

    代码如下:

     <td v-for="col in columns">{{col.slice(0,1).toUpperCase() + col.slice(1)}}</td>
    
    • 1

    vue{{}}内部也可以做计算,我们可以直接在原地添加即可,上面的动画已经演示过如何使用技巧取出我们需要的值,这里就不过多赘述。

    下一个要求是进行模糊查询,我们可以使用filter()函数,然后利用includes()进行判断的条件,该函数会返回truefalse,而filter()也不会影响到原数据内容。

    代码如下

    <tr v-for="entry in this.data.filter((item)=>item.name.toLowerCase().includes(this.searchQuery.toLowerCase()))">
                <td v-for="col in columns">{{entry[col]}}</td>
     </tr>
    
    • 1
    • 2
    • 3

    我们可以看到,vue是可以在v-for上直接计算再进行遍历的,为什么要再这个地方进行一次toLowerCase()呢,其实这是题目的一个要求之一,因为题目要求的模糊查询是无视大小写的,所以我们可以“曲线救国”,干脆在进行判断的时候,就把当前需要进行查询的字段name全都变为小写,然后再把输入的内容也都全部变为小写,这样操作也不会让原先的数据变化。

    所以只需要判断当前的name是否含有input的内容,如果包含就返回true,然后通过filter函数,找到所有满足这个条件的内容,并把这个内容作为一个数组进行返回,所以我们可以正常的在页面显示

    至此达到题目要求,值得注意的是不要忘了在input框对数据进行绑定,不然不会生效哦

      <input placeholder="输入要搜索的名字" v-model="searchQuery"/>
    
    • 1

    完整代码如下:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <title>输入搜索联想</title>
        <style type="text/css">
          #app {
            width: 400px;
            height: 400px;
            margin: 50px auto;
          }
          table {
            border-collapse: collapse;
            border: 1px solid black;
            margin-top: 20px;
          }
    
          thead tr {
            background: #4d83d6;
            color: #fff;
          }
          tr td {
            width: 80px;
            line-height: 30px;
            text-align: center;
          }
          tbody tr:nth-child(2n) {
            background: #efefef;
          }
        </style>
        <script type="text/javascript" src="./js/vue.js"></script>
      </head>
    
      <body>
        <div id="app">
          <!-- TODO:请在下面实现需求 -->
          <span>搜索名字: </span>
          <input placeholder="输入要搜索的名字" v-model="searchQuery"
          />
          <table>
            <thead>
              <tr>
                <td v-for="col in columns">{{col.slice(0,1).toUpperCase() + col.slice(1)}}</td>
              </tr>
            </thead>
            <tbody>
              <tr v-for="entry in this.data.filter((item)=>item.name.toLowerCase().includes(this.searchQuery.toLowerCase()))">
                <td v-for="col in columns">{{entry[col]}}</td>
              </tr>
            </tbody>
          </table>
        </div>
      </body>
    </html>
    <script>
      // TODO:请在下面实现需求
      new Vue({
        el: "#app",
        // 注意:请勿修改 data 选项中的数据!!!
        data: {
          searchQuery: "",
          columns: ["name", "gender", "age"],
          data: [
            {
              name: "rick",
              gender: "male",
              age: 21,
            },
            {
              name: "demen",
              gender: "male",
              age: 26,
            },
            {
              name: "Jack",
              gender: "male",
              age: 26,
            },
            {
              name: "John",
              gender: "female",
              age: 20,
            },
            {
              name: "Lucy",
              gender: "female",
              age: 16,
            },
          ],
        },
      });
    </script>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
  • 相关阅读:
    单片机遥控开关系统设计(结构原理、电路、程序)
    2020年MathorCup数学建模A题无车承运人平台线路定价问题解题全过程(程序+论文)
    LeetCode59.螺旋矩阵
    MySQL定位CPU利用率过高的SQL方法
    windows安装wsl2以及ubuntu
    Go 消息队列及工作池处理
    与创新者同行!Apache Doris 首届线下峰会即将开启,最新议程公开!|即刻预约
    MATLAB 安装额外工具包
    国自然中标越来越难,怎样才能赢在起跑线上?
    迅为LS2K0500开发板动态电源管理龙芯自主指令架构
  • 原文地址:https://blog.csdn.net/m0_70033038/article/details/136717618