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

news2024/11/26 18:44:30

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.coloradmin.cn/o/760086.html

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

相关文章

使用python进行AI选股之同花顺问财

通过问财python库&#xff0c;可以输入中文就能获取AI选股结果&#xff0c;而不需要写很多代码来进行股票选取&#xff0c;如上图就是输入中文”均线多头排列的股票”获取的结果。本文主要介绍问财python库的选股功能和使用步骤。 什么是问财python库 同花顺i问财是同花顺旗下…

Echarts 定制化日历图

目录 改造一&#xff08;变化X轴、Y轴label&#xff09;&#xff1a; 改造二&#xff08;单元格、图例改造&#xff09;&#xff1a; 改造三&#xff08;tooltip、细节优化&#xff09;&#xff1a; 最近在做可视化&#xff0c;发现日历图挺有意思&#xff0c;分享一波吧&am…

SpringBoot项目打包Docker镜像

1、创建springboot项目&#xff0c;并在根目录新建Dockerfile文件 Dockerfile文件内容 FROM adoptopenjdk/openjdk8:jre8u-nightly ADD target/test-k8s-0.0.1-SNAPSHOT.jar test-k8s-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","/test-k8s-0.0.…

Python编程——字符串的拼接

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 前言 本文将讲解字符串的拼接与使用%进行拼接。 目录 ​编…

(二)Qt下多线程实现多个海康工业相机内触发采集回调取流显示

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a;&#xff08;一&#xff09;Qt下实现多个海康工业相机内触发采集回调取流显示 第二章&#xff1a;&#xff08;二&#xff09;Qt下多线程实现多个海康工业相机内触发采集回调取流显示 文章目…

单例模式之常见模式详解

单例模式之常见模式详解 单例模式的定义单例模式的分类饿汉模式懒汉模式 单例模式的主要特点单例模式的应用场景总结 单例模式的定义 单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在单例模式中&#xff0c;类…

2023需求最高的编程语言:Python、JavaScript和Java

科技招聘平台 CodinGame 和 CoderPad 最新发布了一份 2023 年科技行业招聘报告&#xff0c;基于对 14000 名专业人士的调查&#xff0c;对 2023 年科技行业招聘人员和求职者可能面临的情况进行了深入分析。其中一些关键亮点包括&#xff1a; 59% 的开发人员没有计算机科学方面的…

吴恩达机器学习笔记-week2

第2周 目录 第2周 四、多变量线性回归(Linear Regression with Multiple Variables) 4.1 多维特征4.2 多变量梯度下降4.3 梯度下降法实践1-特征缩放4.4 梯度下降法实践2-学习率4.5 特征和多项式回归4.6 正规方程4.7 正规方程及不可逆性(可选) 四、多变量线性回归(Linear Regres…

docker的安装以及常用命令详解

目录 一、docker简介 二、docker安装 三、常用命令 1、显示 Docker 版本信息 2、显示 Docker 系统信息&#xff0c;包括镜像和容器数 3、帮助 四、镜像管理 1、列出镜像 2、获取一个新的镜像 3、查找镜像 4、删除镜像 5、镜像导入与导出 五、容器生命周期 1、运行…

Bring Your Data!Self- supervised Evolution of Large Language Models

Bring Your Data&#xff01;Self- supervised Evolution of Large Language Models IntroductionMethod参考 Introduction 这篇论文提出了一种自监督的评估方式来衡量大型语言模型的能力和局限性。常规的基于数据集的评估方式存在一些缺点: 需要不断新建数据集。存在数据集和…

外包软件定制开发中时间和进度管理

引言 时间和进度管理是外包软件定制开发项目中至关重要的方面。有效地管理时间和进度可以确保项目按计划顺利进行&#xff0c;减少延误和风险&#xff0c;从而提高交付的可靠性和质量。然而&#xff0c;由于外包团队和客户位于不同的地理位置和时区&#xff0c;时间和进度管理…

[MySQL]MySQL索引

[MySQL]MySQL索引 文章目录 [MySQL]MySQL索引1. 索引的概念2. 认识磁盘磁盘的内部结构磁盘中的一个盘片结构定位扇区磁盘随机访问与连续访问 3. MySQL与磁盘交互的基本单位4. 建立共识5. 索引的理解创建测试表进行测试理解单个page理解多个page页目录其他的数据结构的问题聚簇索…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud角色与权限

目录 组织和项目 角色和权限 访问权限等级 文档推荐 Zilliz Cloud 提供访问控制。您可以灵活管理用户,为用户分配不同角色,授予用户不同的集群资源访问和操作权限。无权限的用户无法访问特定资源。 组织和项目 Zilliz Cloud 通过组织和项目实现访问控制和资源分离。 …

PostgreSQL数据库的部署与优化

文章目录 一.PostgreSQL数据库1.PostgreSQL数据库的概念1.1 PostgreSQL 的核心概念 2.PostgreSQL特点3.PostgreSQL的作用4.PostgreSQL的应用场景5.PostgreSQL、mysql、oracle的对比 二.Linux系统安装PostgresSQL&#xff08;Centos7&#xff09;1.更新yun源2.安装PostgreSQL2.1…

【消息队列设计总结】RabbitMQ、Kafka、RocketMQ对比之运行架构

目录 1 RabbitMQ 1.1 工作原理 1.2 名词解释 1.3 交换机的几种类型 2 Kafka 2.1 工作原理 2.2 基本概念 3 RocketMQ 3.1 工作原理 3.2 基本概念 4 RabbitMQ & Kafka & RocketMQ的差异 5 参考文档 1 RabbitMQ 1.1 工作原理 1.【消息生产】生产者&#xff0…

润本股份提交注册:拟募资约9亿元,赵贵钦、鲍松娟夫妇为实控人

撰稿|汤汤 来源|贝多财经 近日&#xff0c;润本生物技术股份有限公司&#xff08;下称“润本股份”&#xff09;在上海证券交易所递交招股书&#xff08;注册稿&#xff09;。据贝多财经了解&#xff0c;润本股份于2023年3月递交上市申请材料&#xff0c;准备在上海证券交易所…

MySQL-DDL-表的结构-查询修改删除

DDL&#xff08;表操作&#xff09; 查询 查询当前数据库所有表&#xff1a;show tables 查询表结构&#xff1a;desc 表名 查询建表语句&#xff1a;show create table 表名 修改&#xff08;主要还是通过图形化界面进行操作&#xff09; 添加字段&#xff1a;alter table …

王道考研数据结构第六章知识点总结

6.1.1图的基本概念 顶点集一定是非空集&#xff0c;边集可以是空集 非连通图&#xff1a;让任意n-1个顶点之间两两相连&#xff0c;另一个顶点与任意一个都不存在路径&#xff0c;则为非连通图的最大边数。 注意长三角地区铁路网不属于连通分量&#xff0c;因为它没有包含尽可能…

简单认识MySQL数据库索引

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、索引的概念1、简介2、作用3、索引的副作用&#xff1a;4、创建索引的原则依据5、索引的分类 二、索引的增删改查1.创建索引&#xff08;1&#xff09;创建普通索…

ios 通过xib自定义控件

通过xib自定义控件 xib和stroyboayd对比 共同点&#xff1a; 都是用来描述软件界面 都是用interface Builder工具来编辑 本质都是转换成代码去创建控件 不同点&#xff1a; xib是轻量级的&#xff0c;用来描述局部ui界面 创建模型文件 XMGCar 自定义控件 xib 图形设计 …