品牌案例-根据关键字实现数组的过滤|学习笔记

简介: 快速学习品牌案例-根据关键字实现数组的过滤

开发者学堂课程【Vue.js 入门与实战品牌案例-根据关键字实现数组的过滤】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/586/detail/8145


品牌案例-根据关键字实现数组的过滤


内容简介:

一、 search 方法获取数据

二、 forEach+indexOf 方法过滤数据

三、 filter+includes 方法过滤数据

 

一、 search 方法获取数据

在搜索名称关键字输入内容,data 跟着其改变,表格中的数据也要随着进行相关的筛选。

页面中的业务表是通过代码中的 Vue 指令(v-for)循环限制出来的,当在搜索名称关键字文本框中输入内容,就会重新渲染出来一个表格,所以应该获取到最新的数据,就不能写死 list,如果写死list,永远拿到的都是 data 里面的 list,这样是不行的。

使用 list 只能获取 data 里面的值,不能获取到新的值,所以应该让渲染出来表格的数据跟着搜索框变化,使用 search 方法传入 keywords,就能获取到 data 中的任何数据。

之前,v-for 中的数据都是从 data 上的 list 中直接渲染过来的;现在,我们自定义了一个 search 方法,同时,把搜索的关键字,通过传参的形式,传递给了 search方法。

在 search 方法内部,通过执行 for 循环,把所有符合搜索关键字的数据,保存到一个新数组中,返回。

当它返回后,再进行 v-for 循环,就是符合条件的数据。那么就定义一个search(keywords) 方法,根据关键字进行数据的搜索,再循环 list 获取数据。

 

二、forEach+indexOf 方法过滤数据

forEach 结合 indexOf 查找所需要的条件;先循环 list,然后 item(循环的每一项),用 item 中的 name 与 keywords 进行比较,看 item.name 是否包含 keywords,如果包含,

就应该把 item 重新存起来,在外面定义一个 newList 空数组,用if语句判断是否包含关键字,用 indexOf 把 keywords传进来,再用!=-1来判断是否包含,

接着 push 一下 item,经过完整的 forEach 循环最后返回 newList,实现数据过滤功能。

空字符串也包含在其中。

var newList = []

this.list.forEach(item=>){

if(item.name.indexOf(keywords)) !=-1){

newList.push(item)

}

})

return newList


三、filter+includes 方法过滤数据

1.filter 方法

this.list.filter(item=>{}),item代表用filter循环的每一项。

注意:forEach,some,filter,findIndes这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关操作。

在操作或循环中有区别,forEach不能被终止;some可以通过return true进行终止;filter用来进行过滤,把查询到的,符合条件的,返回得到一个新数组;findIndex用来找到对象的索引。如果item.name还是包含keywords就进行return,返回一个新数组。ES6中,

为字符串提供了一个新方法,叫做String.prototype.includes('要包含的字符串')

如果包含,则返回true,否则返回false,最后直接return。

return this.list.filter(item=>{

if(item.name.include(keywords)){

return item

}

})

2.jQuery 中的 contains 方法

(1)定义和用法:

①:contains选择器选取包含指定字符串的元素。

②该字符串可以是直接包含在元素中的文本,或者被包含于子元素中。

举例讲解:

<p>123哈哈哈<p>

<p>娃哈哈<p>

<p>345<p>

想要选取出带哈的p标签,就可以使用$( ":contains()"),把所有内容里面包含哈的标签筛选出来,返回一个数组。

③经常与其他元素/选择器一起使用,来选择指定的组中包含指定文本的元素。 

(2)语法:

$( ":contains(text)")

完整代码,如下:

<!DOCTYPE html>

<html lang= "en">

<head>

<meta charset= "UTF-8">

<meta name="viewport" content="width=device-width,initi

al-scale=1.0">

< meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<script src="./lib/vue-2.4.0.js"></script>

<link rel= "stylesheet" href= "./lib/bootstrap-3.3.7.css">

</head>

<body>

<div id= "app">

<div class= "panel panel-primary">

<div class= "panel-heading">

<h3 class= "panel-title">添加品牌</h3>

</div><div class= "panel-body form-inline " >

<lable>

Id:

<input type= "text" class="form-control" v-model= "id">

</lable>

<lable>

Name:

<input type= "text" class="form-control" v-model= "name">

</lable>

<input type="button" value="添加" class="btn btn

-primary" @click= "add()">

</div>

</div>

<table class= "table table-bordered table-hover table-striped">

<thead>

<tr>

<th>Id</th>

<th>Name</th>

<th>Ctime</th>

<th>Operation</th>

</tr>

</thead>

<tbody>

<tr v-for="item in search(keywords)" : key="item.id">

<td>{{ item.id }}</td>

<td>{{ v-text=" item.name " }}</td>

<td>{{ item.ctime }}</td>

<td>

<a href="@click.prevent ="del(item.id)"">删除</a>

</td>

</tr>

</tbody>

</table>

</div>

<script>

var vm = new Vue({

el: '#app',

data: {

id: ' ',

name: ' ',

list: [

{ id: 1, name:  '奔驰', ctime: new Date() },

{ id: 2, name:  '宝马', ctime: new Date() }

]

},

methods: {

add(){

var car ={id: this.id, name:this.name, ctime:new Date()}

this.list.push(car)

}

del(id){

var index=this.list.findIndex(item=>){

if (item.id == id) {

return true;

}

})

this.list.splice(index, 1)

}

search(keywords){

return this.list.filter(item=>{

if(item.name.include(keywords)){

return item

}

})

</script>

</body>

</html>

相关文章
给 element-plus 增加一个防抖的功能(二)
element-plus 功能非常强大,但是好像只有 el-autocomplete 提供了一个防抖功能,其他表单子控件并没有提供防抖功能,而 el-autocomplete 的防抖和我想要的效果又不太一样,所以只好写个函数实现我想要的防抖效果。
|
敏捷开发 存储 搜索推荐
《阿里巴巴Java开发手册v1.4.0(详尽版)》更新,新增16条设计规约
阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。
737733 3
|
Windows
【Azure 环境】使用 az ad group create 时候遇见 Insufficient privileges to complete the operation
【Azure 环境】使用 az ad group create 时候遇见 Insufficient privileges to complete the operation
103 0
|
12月前
|
人工智能 运维 自然语言处理
通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
本文介绍了通义灵码个人版中的@workspace和@terminal功能,帮助运维工程师快速理解项目结构、实现需求和执行指令。@workspace通过RAG技术深度感知代码库,支持快速上手新项目和协助实现新需求;@terminal则提供智能指令生成和解释,提升开发效率。
912 5
|
12月前
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
|
Java 开发者 微服务
单体架构知识点及单体架构的缺陷
一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构,这是一种比较传统的架构风格。
单体架构知识点及单体架构的缺陷
|
JavaScript
reactive
reactive
|
数据可视化 程序员 Shell
Gitlab上手指南(四)|从gitlab上clone项目的两种正确姿势以及常用的git可视化工具介绍
上一节我们已经创建了一个项目,本节课我就把这个项目clone到本地,然后实操一下常用git命令 git clone clone的方式有下面两种,一种是SSH,一种是HTTPS,两种克隆方式的主要区别在
4831 0
|
设计模式 关系型数据库
设计模式 - 六大设计原则之OCP(开闭原则)
在面向对象编程领域中,开闭原则规定软件中的类、对象、模块和函数对扩展应该是开放的,但对修改是封闭的。这意味着 应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。
280 0
设计模式 - 六大设计原则之OCP(开闭原则)