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.mzph.cn/news/3266.shtml

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

相关文章

ubuntu 20.04 4090 显卡驱动安装 深度学习环境配置

1. 显卡驱动安装 准备工作&#xff1a; 换源安装输入法&#xff1a;重启的步骤先不管&#xff08;自选&#xff09;sudo apt update && sudo apt upgrade 禁用nouveau驱动&#xff08;这个驱动是ubuntu开源小组逆向破解NVIDIA的开源驱动&#xff0c;与英伟达的原有驱…

Flask_使用flask_marshmallow序列化数据

代码如下&#xff1a; from flask import Flask from flask_marshmallow import Marshmallow from flask_sqlalchemy import SQLAlchemy from marshmallow import fieldsapp Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] "mysqlpymysql://root:12…

Apikit 自学日记:私有云才有的测试文件库功能,该如何使用呢

在 APIkit 的私有云版本中&#xff0c;提供了测试文件库功能。不过目前该功能仅供私有云产品&#xff0c;线上SaaS产品不提供测试文件库功能 API自动化测试中可以添加文件参数。在这里统一管理所有测试文件。 在测试文件库界面&#xff0c;点击上传文件&#xff1a; 在私有云产…

opencv -12 图像运算之按 《位或》 运算(图像融合图像修复和去除)

位或运算 或运算的规则是&#xff0c;当参与或运算的两个逻辑值中有一个为真时&#xff0c;结果就为真。其逻辑关系可以类比为如图 所示的并联电路&#xff0c;两个开关中只要有任意一个闭合时&#xff0c;灯就会亮。 3-5 对参与或运算的算子的不同情况进行了说明&#xff0c;…

Linux操作系统升级低版本的OpenSSH到9.3的高版本

OpenSSH 9.3之前的版本存在各种各样的安全漏洞&#xff0c;为此&#xff0c;我们需要将OpenSSH升级到最新的9.3的版本。 执行&#xff1a;ssh -V&#xff0c;我们可以查看当前的openssh版本 为了避免升级过程中出现意外而导致服务器无法正常使用&#xff0c;建议操作前先对服务…

力扣 406. 根据身高重建队列

题目来源&#xff1a;https://leetcode.cn/problems/queue-reconstruction-by-height/description/ C题解1&#xff1a;分别对h和k两个维度进行考虑&#xff0c;我这里是优先考虑k值&#xff0c;k值相同的时候h小的排前面。然后再一一遍历&#xff0c;对于people[i]&#xff0c…

Nacos报错Could not resolve placeholder ‘order.name‘ in value “${order.name}“怎么解决?

出现这个原因有两个&#xff1a; 1.首先在Nacos配置中心&#xff0c;写入yml配置文件的数据和后端服务在取数据的时候名称不一致 如下图&#xff0c;现在我的配置中心为order-service 看看其中的文件内容信息&#xff1a; 再看看后端是怎么取的&#xff1a; 看出上面错误了吗…

西安---高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

能源是国民经济发展和人民生活必须的重要物质基础。在过去的200多年里&#xff0c;建立在煤炭、石油、天然气等化石燃料基础上的能源体系极大的推动了人类社会的发展。但是人类在使用化石燃料的同时&#xff0c;也带来了严重的环境污染和生态系统破坏。近年来&#xff0c;世界各…

vue写车牌号 自定义键盘

vue写车牌号自定义键盘 <template><div><div class"content-wrapper"><div class"content-top-wrapper"><van-radio-group v-model"radioCarType"><van-radio name"1">蓝牌<imgslot"icon…

什么是渲染?一文看懂,萌新赶紧收藏码住!

十四五规划提出“加快数字化发展&#xff0c;建设数字中国”&#xff0c;数字技术的快速发展&#xff0c;从起初的内容创建到最终的效果呈现&#xff0c;都离不开渲染技术。目前&#xff0c;渲染技术被广泛应用于教育、医疗、影视动画、建筑设计等多个领域。它能有效满足用户对…

Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术提升数据分析能力

专题一、空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二、ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与…

在第二代SpringCloud中配置网关组件

我们接着上次的微服务的项目继续搭建网关组件: 搭建微服务项目 前提准备: 1.打开nacos服务注册中心,在浏览器通过这地址访问 http://10.48.185.7:8848/nacos/index.html 2.启动page和product的微服务 1.新建一个网关的项目 2.导入pom依赖 <!-- Spring Boot父启动器…

DBeaver连接华为高斯数据库 DBeaver连接Gaussdb数据库 DBeaver connect Gaussdb

DBeaver连接华为高斯数据库 DBeaver连接Gaussdb数据库 DBeaver connect Gaussdb 一、概述 华为GaussDB出来已经有一段时间&#xff0c;最近工作中刚到Gauss数据库。作为coder&#xff0c;那么如何通过可视化工具来操作Gauss呢&#xff1f; 本文将记录使用免费、开源的DBeaver来…

云迁移第二波热潮来袭,你准备好了吗?

最近&#xff0c;云迁移再次被频繁提及&#xff0c;企业对云迁移的需求量有回升趋势&#xff0c;究其根本&#xff0c;主要有以下原因&#xff1a; 企业数字化进程加速&#xff0c;本地上云需求强劲 根据《2021中国企业上云指数洞察报告》&#xff0c;我国实体经济上云渗透率…

Appium+Python+PO 设计模式

目录 前言&#xff1a; 什么是 PageObject? 关于报告的输出 总结 前言&#xff1a; Appium是一个用于自动化移动应用程序测试的开源工具&#xff0c;Python是一种简单易学且功能强大的编程语言&#xff0c;PO&#xff08;Page Object&#xff09;设计模式是一种在自动化测…

使用shell监控应用运行状态通过企业微信接收监控通知

目的&#xff1a;编写shell脚本来监控应用服务运行状态&#xff0c;若是应用异常则自动重启应用通过企业微信接收监控告警通知 知识要点&#xff1a; 使用shell脚本监控应用服务使用shell脚本自动恢复异常服务通过企业微信通知接收监控结果shell脚本使用数组知识&#xff0c;…

session 生命周期和经典案例-防止非法进入管理页面

文章目录 session 生命周期和Session 经典案例-防止非法进入管理页面session 生命周期Session 生命周期-说明代码演示说明 Session 的生命周期创建CreateSession2创建ReadSession2 解读Session 的生命周期代码示例创建DeleteSession Session 经典案例-防止非法进入管理页面需求…

bgp联邦

1、ip配置 [r1-LoopBack0]ip address 192.168.1.1 24 [r1-LoopBack1]ip address 10.0.0.1 24 [r1-GigabitEthernet0/0/0]ip address 12.0.0.1 24[r2-GigabitEthernet0/0/0]ip address 12.0.0.2 24 [r2-GigabitEthernet0/0/1]ip address 172.16.1.1 29 [r2-GigabitEthernet0/0/…

【从零开始学习CSS | 第三篇】选择器优先级

目录 前言&#xff1a; 常见选择器的优先级&#xff08;从高到低&#xff09; 选择器的权重&#xff1a; 总结&#xff1a; 前言&#xff1a; 在前几篇文章中我们介绍了大量的选择器&#xff0c;那么大量的选择器在使用的时候&#xff0c;一定是有一个优先级顺序的&#xff…