vue 通过多组复选框来过滤数据

1.通过if else 来筛选数据
在这里插入图片描述
在这里插入图片描述

<template>
<div><div><label><input type="checkbox" v-model="checkedNames" value="北京"> 北京</label><label><input type="checkbox" v-model="checkedNames" value="上海"> 上海</label><label><input type="checkbox" v-model="checkedNames" value="郑州"> 郑州</label></div><div><label><input type="checkbox" v-model="checkedPrices" value="高"></label><label><input type="checkbox" v-model="checkedPrices" value="低"></label></div>
<ul><li v-for="(item, index) in filteredList" :key="index">{{ item.name }} - {{ item.price }}</li>
</ul>
</div>
</template><script>
export default {data() {return {list: [{ name: '北京', price: '高' },{ name: '北京', price: '低' },{ name: '上海', price: '高' },{ name: '上海', price: '低' },{ name: '郑州', price: '高' },{ name: '郑州', price: '低' }],checkedNames: [],checkedPrices:[]}},computed: {filteredList() {// 如果两个勾选框都没有选中,则返回全部数据if (this.checkedNames.length === 0 && this.checkedPrices.length === 0) {return this.list;}// 只勾选了地区,没有勾选价格else if (this.checkedNames.length > 0 && this.checkedPrices.length === 0) {return this.list.filter(item => this.checkedNames.includes(item.name))}// 只勾选了价格,没有勾选地区else if (this.checkedNames.length === 0 && this.checkedPrices.length > 0) {if(this.checkedPrices.includes("高")) {return this.list.filter(item => item.price === "高");} else if(this.checkedPrices.includes("低")) {return this.list.filter(item => item.price === "低");}}// 同时勾选了地区和价格else {let areaFilter = this.list.filter(item => this.checkedNames.includes(item.name));let priceFilter = [];if(this.checkedPrices.includes("高")) {priceFilter.push(...areaFilter.filter(item => item.price === "高"));}if(this.checkedPrices.includes("低")) {priceFilter.push(...areaFilter.filter(item => item.price === "低"));}return priceFilter;}}}
}
</script>

2.优化:通过v-for来循环对象的模式+集合来过滤数据

<template><div><div v-for="(item, itemIndex) in searchArr" :key="itemIndex"><br>{{itemIndex}}:<label v-for="(li, liIndex) in item" :key="liIndex" :name="itemIndex"><input type="checkbox" v-model="checkedArr[itemIndex]" :value="li.name" :key="li.name">{{li.name}}</label></div><ul><li v-for="(item, index) in listShow" :key="index">{{item.id}}. {{ item.name }} - {{ item.price }}</li></ul></div>
</template><script>export default {data() {return {searchArr: {address: [{"name": "北京"}, {"name": "上海"}, {"name": "郑州"}],type: [{"name": "历史遗迹"}, {"name": "自然风光"}, {"name": "主题公园"}],attr: [{"name": "儿童"}, {"name": "年轻人"}, {"name": "老年人"}],price: [{"name": "1800"}, {"name": "2000"}, {"name": "3000"}]},checkedArr: {},list: [{id: 0,name: "北京大学",address: "北京",type: "历史遗迹",attr: "儿童",price: "1800"}, {id: 1,name: "湖北11",address: "湖北",type: "自然风光",attr: "儿童",price: "1800"}, {id: 2,name: "南京大学",address: "北京",type: "主题公园",attr: "儿童",price: "1800"}, {id: 3,name: "周师",address: "郑州",type: "历史遗迹",attr: "儿童",price: "1800"}, {id: 4,name: "郑州大学",address: "郑州",type: "主题公园",attr: "年轻人",price: "1800"}, ]}},mounted() {this.initCheckedArr();},methods: {initCheckedArr() {for (var key in this.searchArr) {this.checkedArr[key] = []}},searchList(key) {var l = this.list.map(item => {if (this.checkedArr[key] != undefined &&this.checkedArr[key].length > 0 &&this.checkedArr[key].indexOf(item[key]) != -1)return item}).filter(item => item != undefined)return l}},computed: {listShow() {console.log(this.checkedArr);var arr = [];for (var key in this.checkedArr) {arr = arr.concat(this.searchList(key))}return [...new Set(arr)].sort((a, b) => a.id - b.id)}}}
</script>

初始化checkedArr的值如下图
在这里插入图片描述

只要每点击一个复选框就会往这个对象数组中对应的元素中添加对应的属性

在这里插入图片描述

通过循环这个对象当中的数组来过滤数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26912.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

本文大纲截图&#xff1a; UnitTest框架&#xff1a; PyTest框架&#xff1a; 框架&#xff1a; 框架英文单词 framework&#xff0c;为解决一类事情的功能的集合。需要按照框架的规定&#xff08;套路&#xff09;去书写代码。 一、UnitTest框架介绍【文末分享自动化测试学习…

【iOS】—— 编译链接

【iOS】—— 编译链接 文章目录 【iOS】—— 编译链接编译流程预处理&#xff08;预编译Prepressing&#xff09;编译&#xff08;Compilation&#xff09;汇编&#xff08;Assembly&#xff09;链接&#xff08;Linking&#xff09; 编译流程 编译流程分为四步 预处理&#…

Windows搭建Nginx实现RTMP转为HLS流

所需软件 nginx-1.7.11.3-Gryphon&#xff08;这个包含必须的RTMP模块&#xff0c;普通的Ngxin没有这个&#xff09;ffmpegVLC 配置Nginx 1为Nginx配置RTMP和HLS 这里定义了一个叫live的RTMP路径。同时设置其开启HLS功能&#xff0c;那么所有推送到这个地址的RTMP流都会自动生…

csapp 深入理解计算机系統 笔记

csapp 深入理解计算机系統 笔记 参考lab 第1章&#xff1a;计算机系统漫游第 2 章&#xff1a;信息的表示和处理Data Lab 第03章&#xff1a;程序的机器级表示Bomb Lab 参考 计算机速成课 | Crash Course 字幕组 (全40集 2018-5-1 精校完成)csapp重点解读深入理解计算机系統 c…

讯为RK3568开发板到手编译buildroot系统入坑一

从事单片机开发多年一直想买一个开发板学习Linux系统&#xff0c;这次狠心花了800多打样买了一个讯为的RK3568低配。裸板配置。 因为讯为没有编译系统的视频教程&#xff0c;只有文档的教程&#xff0c;而且只有瑞芯微官方带的Linux源码中的系统编译后文档教程。像ubuntu是没有…

安装hive数据仓库

部署hive数据库 环境准备 需要安装部署完成的Hadoop的环境如果不会搭建的可以参考&#xff1a; 安装mysql 卸载Centos7自带的mariadb rpm -qa|grep mariadbrpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodepsrpm -qa|grep mariadb mariadb-libs-5.5.64-1.el7.x86_64是使用…

蓝牙耳机选购攻略:开放式耳机篇!如何选购开放式耳机?开放式蓝牙耳机哪些品牌比较好?过来人告诉你如何选购开放式耳机!

作为一个耳机爱好者&#xff0c;最近更是喜欢上了开放式蓝牙耳机&#xff0c;实际用过的起码有十几款&#xff0c;但其实最终能留下来的也只有四五款。由于前期并不知道应该如何选择开放式耳机&#xff0c;经常都会高价买到些质量差、音质也不好、漏音大的开放式耳机&#xff0…

关键点检测SIFT算法笔记

SIFT算法 SIFT&#xff08;Scale Invariant Feature Transform&#xff09;&#xff0c;尺度不变特征变换。具有旋转不变性、尺度不变性、亮度变化保持不变性&#xff0c;是一种非常稳定的局部特征。在目标检测和特征提取方向占据着重要的地位。 SIFT算法所查找到的关键点是一些…

大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍

大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍 1.大语言模型的预训练 1.LLM预训练的基本概念 预训练属于迁移学习的范畴。现有的神经网络在进行训练时&#xff0c;一般基于反向传播&#xff08;Back Propagation&…

解决Gson解析json字符串,Integer变为Double类型的问题

直接上代码记录下。我代码里没有Gson包&#xff0c;用的是nacos对Gson的封装&#xff0c;只是包不同&#xff0c;方法都一样 import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken; import com.alibaba.nacos.shaded.com.google.gson.*;import java.util.Map;…

3.2 多路复用和多路分用

3.2 多路复用和多路分用 多路复用/分用分用如何工作&#xff1f;无连接分用面向连接的分用面向连接的分用&#xff1a;多线程Web服务器 多路复用/分用 分用如何工作&#xff1f; 主机接收到IP数据报(datagram) 每个数据报携带源IP地址、目的IP地址。每个数据报携带一个传输层的…

【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…