位置: IT常识 - 正文

VUE前端实现“模糊搜索“(纯前端)(vue前端页面设计)

编辑:rootadmin
VUE前端实现“模糊搜索“(纯前端) 文章目录闲言一、整体思路二、具体步骤1. 搜索内容的字符串 -> 字符数组2. 被查询对象增加匹配度属性3. 检测匹配度,并记录到匹配度属性4. 按照匹配度降序显示,不显示匹配度为零的对象总结闲言

推荐整理分享VUE前端实现“模糊搜索“(纯前端)(vue前端页面设计),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue 前端模板,vue前端页面设计,vue.js前端,vuejs前端开发实战,vue前端开发教程,vuejs前端开发实战,vue 前端模板,vue 前端模板,内容如对您有帮助,希望把文章链接给更多的朋友!

提示:可以跳过闲言,直接上干货,这里谈谈我的思路是如何诞生的。 昨天我开发的内容轮到输入搜索,从UI上看:input输入框 + button搜索按钮,就实现了。关键在于背后如何实现对数据的搜索功能,常见方法:搜索内容给到后端,sql语句进行模糊查询,将结果返回前端,再显示。然而情况有所不同,如果后端数据库的所有信息,在页面created时就全部给前端了呢?这种情况下,如果使用常见,未免有点浪费时间,但是前端的JS如何实现模糊查询?于是我和舍友讨论前端实现模糊查询的问题时,我们以百度为例,思考百度的搜索功能是如何实现的呢?我当时开玩笑似的说“百度说不定是把我们输入的搜索内容全部打散成字符数组,然后进行的匹配”。第二天,我继续做开发时,发现网上纯前端实现模糊查询的我都看不懂(俺这个阅读能力不行),所以我决定就按照我昨天的思路做做尝试,于是就有了今天这篇博客。

VUE前端实现“模糊搜索“(纯前端)(vue前端页面设计)

提示:以下是本篇文章正文内容,下面案例可供参考

一、整体思路

核心思想: 将输入的内容拆分成单个字符形成搜索数组,然后利用indexOf查看被查询对象与这个搜索数组的重合度/匹配度(计算每个字符在被查询对象中出现的次数),并做好记录,之后就是排序和显示。

具体步骤:

将用户输入的搜索内容即字符串,划分成字符数组(后续称为搜索数组)为每个被查询对象增加匹配度属性,检测搜索数组与每个被查询对象的匹配程度,并记录到该对象的匹配度属性将所有被查询对象按照自身的匹配度属性降序排列,且不显示零匹配度的对象

注意:

被查询对象是以对象数组的形式存储,对象数组中存储所有被查询对象二、具体步骤

注意:

此次搜索输入:试卷名称相关内容根据输入内容,查询哪些试卷的试卷名称与之匹配1. 搜索内容的字符串 -> 字符数组this.selectContent:用户输入的搜索内容字符串selectList:划分后的字符数组var selectList=this.selectContent.split('');2. 被查询对象增加匹配度属性thiis.testPaperListPart:被查询对象的对象数组,即存储所有试卷的试卷对象数组this.testPaperListPart[i].matchDegree=0; // 建立匹配度,初始为03. 检测匹配度,并记录到匹配度属性this.testPaperListPart[i].testName:被检测对象的实际检测内容,即每个试卷的试卷名称,主要检测试卷名称与输入内容的匹配程度通过indexOf方法实现检测匹配度,相关博客《indexOf介绍》、《js 查找字符串中某个字符出现的位置和次数》。我们根据indexOf得知搜索数组中每个字符在被检测对象的检测内容中的出现次数,根据出现次数计算匹配度属性。

举例:

搜索数组:selectList=[‘语’,‘文’,‘下’];某一个试卷的试卷名称:this.testPaperListPart[i].testName=‘大学语文(文化版下)’;利用indexOf,检测该试卷的试卷名称与搜索数组的匹配度:其中 ‘语’ 出现了1次、‘文’ 出现了2次、‘下’ 出现了1次;那么该testName与搜索数组的匹配度即1+2+1=4次,则该试卷的匹配度matchDegree=4。for(var i=0;i<this.testPaperListPart.length;i++){ // 建立匹配度,初始化为0 this.testPaperListPart[i].matchDegree=0; // 检测匹配度 for(var k=0;k<selectList.length;k++){ // 利用indexOf,记录每个字符在testName中出现的个数,并记录到匹配度 var index = this.testPaperListPart[i].testName.indexOf(selectList[k]); while(index!=-1){ this.testPaperListPart[i].matchDegree++; index=this.testPaperListPart[i].testName.indexOf(selectList[k],index+1); } }}4. 按照匹配度降序显示,不显示匹配度为零的对象// 根据匹配度排序this.testPaperListPart.sort(function(a, b){return b.matchDegree - a.matchDegree}); // 删除匹配度为0的试题、删除matchDegree属性var k=0;while (k<this.testPaperListPart.length){// 删除匹配度为0的试题 if(this.testPaperListPart[k].matchDegree==0){ this.testPaperListPart.splice(k,1); continue;// 直接进入下一个循环 } Reflect.deleteProperty(this.testPaperListPart[k],'matchDegree'); // 删除matchDegree属性 k++;}总结
本文链接地址:https://www.jiuchutong.com/zhishi/287286.html 转载请保留说明!

上一篇:ElementPlus DateTimePicker日期时间选择器限制可选时间范围(精确时分秒)

下一篇:h5响应式布局、PC和移动端适配方案(h5响应式布局是什么)

  • js保留两位小数四舍五入(js保留两位小数 补零)

    js保留两位小数四舍五入(js保留两位小数 补零)

  • mac自动黑屏时间怎么设置(mac黑屏时间设置方法)

    mac自动黑屏时间怎么设置(mac黑屏时间设置方法)

  • 微信接收的文件在哪个文件夹(微信接收的文件怎么删除)

    微信接收的文件在哪个文件夹(微信接收的文件怎么删除)

  • 如何去掉微博图片水印(如何去掉微博图片)

    如何去掉微博图片水印(如何去掉微博图片)

  • 现代计算机的主要特点(现代计算机的主要功能部件有几个)

    现代计算机的主要特点(现代计算机的主要功能部件有几个)

  • 惠普打印机驱动安装时间过长(惠普打印机驱动官网下载)

    惠普打印机驱动安装时间过长(惠普打印机驱动官网下载)

  • word空白页删除不掉(word空白页删除快捷键)

    word空白页删除不掉(word空白页删除快捷键)

  • 存储载体通常包括什么(存储载体通常包括a计算机硬盘b光盘cu盘d移动硬盘)

    存储载体通常包括什么(存储载体通常包括a计算机硬盘b光盘cu盘d移动硬盘)

  • 拼多多收货人要真实姓名吗(拼多多收件人必须实名吗)

    拼多多收货人要真实姓名吗(拼多多收件人必须实名吗)

  • txupd是什么应用程序

    txupd是什么应用程序

  • excel激活要钱吗(excel激活是什么意思)

    excel激活要钱吗(excel激活是什么意思)

  • 腾讯最多可以登录几个人(腾讯最多可以登录几个号)

    腾讯最多可以登录几个人(腾讯最多可以登录几个号)

  • 华为mate30充满电自动断电吗(华为mate30充满电多久)

    华为mate30充满电自动断电吗(华为mate30充满电多久)

  • 华为lra-al00是什么型号手机(lar-al00是华为什么型号)

    华为lra-al00是什么型号手机(lar-al00是华为什么型号)

  • 群主解散群聊记录还有吗(群主解散群聊记录怎么查)

    群主解散群聊记录还有吗(群主解散群聊记录怎么查)

  • 微信收款二维码怎么改名字(微信收款二维码在哪里可以打印)

    微信收款二维码怎么改名字(微信收款二维码在哪里可以打印)

  • vivos1闪充多少w(vivos1闪充多少瓦)

    vivos1闪充多少w(vivos1闪充多少瓦)

  • 抖音怎么没有合拍功能(抖音怎么没有合集了)

    抖音怎么没有合拍功能(抖音怎么没有合集了)

  • 卖家没发货可以直接退款吗(卖家没发货可以退运费险吗)

    卖家没发货可以直接退款吗(卖家没发货可以退运费险吗)

  • 信息发送失败是什么原因(信息一直发送失败是什么原因)

    信息发送失败是什么原因(信息一直发送失败是什么原因)

  • 华为手机怎么定位对方位置(华为手机怎么定位找回)

    华为手机怎么定位对方位置(华为手机怎么定位找回)

  • 苹果x视图怎么不见了(苹果x视图在哪里)

    苹果x视图怎么不见了(苹果x视图在哪里)

  • 苹果怎么设置屏幕录制(苹果怎么设置屏保和壁纸)

    苹果怎么设置屏幕录制(苹果怎么设置屏保和壁纸)

  • mysql右外连接查询的介绍(mysql 内连接查询)

    mysql右外连接查询的介绍(mysql 内连接查询)

  • 固定资产抵扣增值税何时开始
  • 工会筹备金的计税依据是应发工资还是实发工资
  • 小规模纳税人减征额怎么计算
  • 企业所得税清算备案日和结束日怎么填
  • 如何认定纳税人资格证书
  • 融资租赁营改增时间
  • 商场返券活动300返220
  • 供应商价格折扣
  • 只有利息费用的财务费用如何结转?
  • 企业会计做无票收入也要交税吗?
  • 高新研发费的账务处理怎么做?
  • 对方公司不能开发票怎么办
  • 企业向个人赠送车辆
  • 补计提以前年度增值税
  • 工程开发票备注栏必需要写吗?
  • 为员工购置小车怎么做账
  • 进项发票认证抵扣时间有限制吗
  • 一般纳税人房产税是按季还是按月申报
  • 现金支出有哪些项目
  • 库存商品结转会计分录
  • 呆账催讨原则是谁提出的
  • 采购及安装合同怎么缴纳印花税
  • 合同的情势变更是什么
  • asldrsrv.exe
  • 非货币性资产投资个人所得税
  • 废品损失的核算一定要设废品损失账户吗
  • 新办公司实收资本怎么查
  • vue foreach is not a function
  • 合并资产负债表模板
  • 36号文45条
  • vue中created和mounted
  • 六款小巧的HTTP Server[C语言] 贵贵的博客 开发|架构|开源|共享
  • 什么是付出对价的公允
  • 将10万元存款投入企业的会计分录
  • 征收率是税率吗
  • 简易征收的进项税怎么处理
  • 如何用ps做半圆
  • c语言中使用指针的好处
  • 帝国cms使用手册
  • 小规模纳税人是什么意思
  • 小规模季报利润表的本月数怎么报
  • 企业收到国债专项资金怎么记账
  • 公司注册地址变更有什么影响
  • 会计调转回去还要继续教育吗
  • 合同履约成本如何设置明细科目
  • 对公账户给别人走账
  • 收到银行承兑汇票
  • 车辆按揭利息财务怎么算
  • 工程款预缴税
  • 票面利率大于市场利率,则发行价格一定( )面值
  • 如何证明自己是中国人
  • 餐饮业怎样做账
  • 处置固定资产应通过什么账户核算
  • 怎样计算计时工资
  • sql中的where in
  • sql Set IDENTITY_INSERT的用法
  • 一个基于口令的用户身份认证基本过程是怎样的?
  • sql1068错误
  • svchost一直在下载什么
  • ubuntu系统安装教程详细
  • 如何给电脑重装系统win7系统
  • fedora系统怎么安装
  • win7 mysql
  • 微软称十年内将淘汰程序员
  • 安装centos7安装位置没有磁盘
  • win10开始菜单磁贴颜色
  • netfilter/iptables模块编译及应用
  • unity3d官方案例
  • js数组洗牌
  • jquery操作table
  • node.js中的http.response.write方法使用说明
  • jquery中哪个属性判断按钮是否被选择?
  • sdk和安卓版本
  • python自动化运维教程
  • Android EventBus实战
  • 已经开具的专用发票
  • 河南电子税务局官网入口
  • 吉林网上报税网址
  • 江苏发票真伪查询网站
  • 中通快递深圳同城多少钱
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设