在 Vue.js 中使用对象映射和枚举类型

学习啦!

对象映射是一种将一个对象的属性名映射到另一个对象的属性名的方法。

const keyMapping = {username: '用户名', gender: { label: '性别', mapping: gender }, // `gender` 映射为 `性别`email: '邮箱', // `email` 映射为 `邮箱`phone: '电话', // `phone` 映射为 `电话`address: '地址', // `address` 映射为 `地址`status: { label: '状态', mapping: userStatus }, // `status` 映射为 `状态`
};

枚举类型枚举类型通常用对象表示,其中键是内部值,值是显示值。方便进行双向映射。

const Color = {RED: '红色',GREEN: '绿色',BLUE: '蓝色'
};

双向映射:允许从正向或者反向两个方向进行查找和转换。

正向映射:从内部值到显示值的映射。

function getDisplayName(color) {return Color[color] || '未知颜色';
}console.log(getDisplayName('RED')); // 输出: 红色
console.log(getDisplayName('UNKNOWN')); // 输出: 未知颜色

反向映射:从显示值到内部值的映射。

const ColorReverse = Object.fromEntries(Object.entries(Color).map(([key, value]) => [value, key])
);function getInternalName(displayName) {return ColorReverse[displayName] || 'UNKNOWN';
}console.log(getInternalName('红色')); // 输出: RED
console.log(getInternalName('未知颜色')); // 输出: UNKNOWN

效果:

综合应用:

<template><div class="userInfo"><div class="userInfo-list"><div style="display: flex;align-items: center;justify-content: start;" v-for="item in userInfoSource":key="item.label"><h1>{{ item.label }}:</h1><h1>{{ item.value }}</h1></div></div></div>
</template><script setup>
import { ref, onMounted } from 'vue';
const gender = {0: '男',1: '女',2: '其他',
};
const userStatus = {0: '冻结',1: '正常',2: '删除',
};
// 1. 初始化 `userInfoSource`,包含 label 和空值
const userInfoSource = ref([{ label: '用户名', value: '' },{ label: '性别', value: '-' },{ label: '邮箱', value: '-' },{ label: '电话', value: '-' },{ label: '地址', value: '-' },{ label: '状态', value: '-' },
]);// 2. `keyMapping` 对象用于映射 userInfo 中的字段名
const keyMapping = {username: '用户名', // `username` 映射为 `用户名`gender: { label: '性别', mapping: gender }, // `gender` 映射为 `性别`email: '邮箱', // `email` 映射为 `邮箱`phone: '电话', // `phone` 映射为 `电话`address: '地址', // `address` 映射为 `地址`status: { label: '状态', mapping: userStatus }, // `status` 映射为 `状态`
};// 3. 模拟的用户信息数据
const userInfo = ref([{ id: 1, username: 'Alice', gender: 0, age: 25, email: 'alice@example.com', phone: '1234567890', address: '123 Street', status: 1 },{ id: 2, username: 'Bob', gender: 1, age: 30, email: 'bob@example.com', phone: '9876543210', address: '456 Avenue', status: 0 },
]);// 4. 更新 `userInfoSource` 的函数,匹配 `keyMapping` 映射关系
const updateUserInfo = () => {if (Array.isArray(userInfo.value) && userInfo.value.length > 0) {const firstUser = userInfo.value[0]; // 假设只取第一个用户的信息for (const [key, mappingInfo] of Object.entries(keyMapping)) {if (firstUser.hasOwnProperty(key)) {const label = typeof mappingInfo === 'string' ? mappingInfo : mappingInfo.label;const index = userInfoSource.value.findIndex(item => item.label === label);if (index !== -1) {let displayValue = firstUser[key] || '-'; // 默认值// 检查是否存在枚举映射if (typeof mappingInfo === 'object' && mappingInfo.mapping) {console.log(firstUser[key], 'firstUser[key]');displayValue = mappingInfo.mapping[firstUser[key]] || displayValue;}userInfoSource.value[index].value = displayValue; // 更新 value 值}}}} else {console.error('userInfo is not a valid array or is empty:', userInfo.value);}
};// 5. 在组件挂载后更新用户信息
onMounted(() => {updateUserInfo(); // 确保在组件加载后执行
});</script><style lang="scss" scoped>
.userInfo {height: calc(100% - 25%);display: flex;flex-direction: column;.userInfo-list {height: calc(100% - 2rem);background-color: rgba(0, 15, 35, .5);padding: 0 1rem;margin-bottom: 1rem;flex: 1;margin-left: .5rem;}
}
</style>

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

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

相关文章

嵌入式学习(15)-stm32通用GPIO模拟串口发送数据

一、概述 在项目开发中可能会遇到串口不够用的情况这时候可以用通过GPIO来模拟串口的通信方式。 二、协议格式 按照1位起始位8位数据位1位停止位的方式去编写发送端的程序。起始位拉低一个波特率的时间&#xff1b;发送8位数据&#xff1b;拉高一个波特率的时间。 三、代码 …

【C语言期末复习全攻略】:知识点汇总与考试重点剖析、附刷题资料软件

零、引用 期末考试临近&#xff0c;无论你是初学者还是“熬夜选手”&#xff0c;C语言的学习都需要系统梳理和重点突破。本文将全面总结C语言的核心知识点&#xff0c;并针对考试中常见的题型提供复习建议&#xff0c;助你轻松拿下高分。 文末提供了一款免费的C语言刷题软件 …

美颜SDK接入实战:构建智能化直播美颜APP的技术路径详解

如何将美颜SDK顺利接入并构建一个智能化的直播美颜APP呢&#xff1f;本文将从技术路径的角度&#xff0c;带你深入解析这一过程。 一、了解美颜SDK的基本功能 美颜SDK通常包括多个功能模块&#xff0c;针对不同的直播场景&#xff0c;SDK会提供针对性的优化算法&#xff0c;确…

【Spring】Spring事务和事务传播机制

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 一、Spring事务 我们在MySQL阶段已经学习了MySQL的事务相关知识&#xff0c;详情可见 【MySQL数据库】索引与事务-CSDN博客 1、概念 我们在此做一个简单回顾…

Qt 小项目 学生管理信息系统

主要是对数据库的增删查改的操作 登录/注册界面&#xff1a; 主页面&#xff1a; 添加信息&#xff1a; 删除信息&#xff1a; 删除第一行&#xff08;支持多行删除&#xff09; 需求分析&#xff1a; 用QT实现一个学生管理信息系统&#xff0c;数据库为MySQL 要求&#xf…

核心网S6730-H48X6C-V2堆叠

核心网是电信网络的中枢,负责数据传输、服务提供和网络管理,对保障通信质量、支持新技术服务和维护网络安全至关重要。堆叠技术通过将多个网络设备逻辑上整合为一个单元,简化管理,提升网络可用性和性能,同时降低成本,增强网络扩展性。 堆叠在网络建设中至关重要,它通过…

教程: 5分钟部署 APIPark 开源 LLM Gateway 与 API 开放门户

极大简化了大语言模型调用的过程&#xff0c;无需复杂代码即可同时连接主流大语言模型&#xff0c;让企业更加快捷、安全地使用AI。喜欢或感兴趣的小伙伴们赶紧去体验吧&#xff01; &#x1f517;更详细使用教程可以查看&#xff1a;APIPark 产品使用文档 APIPark 提供出色的…

HTML5教程-表格宽度设置,最大宽度,自动宽度

HTML表格宽度 参考&#xff1a;html table width HTML表格是网页设计中常用的元素之一&#xff0c;可以用来展示数据、创建布局等。表格的宽度是一个重要的参数&#xff0c;可以通过不同的方式来设置表格的宽度&#xff0c;本文将详细介绍HTML表格宽度的不同设置方式和示例代…

RISC-V架构下OP-TEE 安全系统实践

安全之安全(security)博客目录导读 本篇博客&#xff0c;我们聚焦RISC-V 2024中国峰会上的RISC-V和OP-TEE结合的一个安全系统实践&#xff0c;来自芯来科技桂兵老师。 关于RISC-V TEE(可信执行环境)的相关方案&#xff0c;如感兴趣可参考RISC-V TEE(可信执行环境)方案初探 首…

RTK数据的采集方法

采集RTK&#xff08;实时动态定位&#xff09;数据通常涉及使用高精度的GNSS&#xff08;全球导航卫星系统&#xff09;接收器&#xff0c;并通过基站和流动站的配合来实现。本文给出RTK数据采集的基本步骤 文章目录 准备设备设置基站设置流动站数据采集数据存储与处理应用数据…

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…

Mongodb副本集环境安全认证

我所配置的mongodb副本集群 step1启动 MongoDB 副本集的每一个节点 mongod --config=/usr/local/mongodb_wjx/wjx01/mongod.conf mongod --config=/usr/local/mongodb_wjx/wjx02/mongod.conf mongod --config=/usr/local/mongodb_wjx/wjx03/mongod.conf step2通过主节点添加管…

完美解决Qt Qml窗口全屏软键盘遮挡不显示

1、前提 说明&#xff1a;我使用的是第三方软键盘 QVirtualKeyboard QVirtualKeyboard: Qt5虚拟键盘支持中英文,仿qt官方的virtualkeyboard模块,但使用QWidget实现。 - Gitee.com 由于参考了几篇文章尝试但没有效果&#xff0c;链接如下&#xff1a; 文章一&#xff1a;可能…

在做题中学习(77):快排

解法&#xff1a;快排 思路&#xff1a; 1.快排排一趟&#xff0c;递归分出来的左区间和右区间&#xff08;一趟的思想&#xff0c;看我的前一个文章&#xff1a;颜色分类题解&#xff09; 2.递归&#xff1a;想清楚 函数头 和 返回条件怎么写 3.优化&#xff1a;等概率的取…

AUTO TECH China 2025 华南展:探索汽车技术的新纪元

AUTO TECH China 2025 华南展&#xff1a;探索汽车技术的新纪元 随着科技的日新月异&#xff0c;汽车行业正经历着前所未有的变革。从电动化、智能化到网联化&#xff0c;每一项新技术的应用都在重塑我们对汽车的认知。为了展示这些令人激动的创新成果&#xff0c;我们荣幸地宣…

C# RSA加密和解密,RSA生成私钥和公钥

C# RSA加密和解密&#xff0c;RSA生成私钥和公钥&#xff08;使用XML格式秘钥&#xff09; 目录 前言生成xml格式的公钥和私钥 PrivateKeyPublicKey测试加密、解密 方案1&#xff1a;RSA公钥加密&#xff0c;RSA私钥解密方案2&#xff1a;RSA私钥加密&#xff0c;RSA私钥解密…

指标加权评价方法

文章目录 层次分析法&#xff08;Analytic Hierarchy Process, AHP&#xff09;熵权法原理计算方法 Technique for Order Preference by Similarity to Ideal Solution(TOPSIS, 优劣解距离法)原理计算方法 层次分析法&#xff08;Analytic Hierarchy Process, AHP&#xff09; …

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…

SpringBoot 赋能家乡特色推荐系统:高效架构与前沿技术集成

1 绪 论 1.1课题背景与意义 在Internet高速发展的今天&#xff0c;计算机的应用几乎完全覆盖我们生活的各个领域&#xff0c;互联网在经济&#xff0c;生活等方面有着举足轻重的地位&#xff0c;成为人们资源共享&#xff0c;信息快速传递的重要渠道。在中国&#xff0c;网上管…

国际知名会计事务所安永造访图为科技,探索财务管理全球化新路径

今日&#xff0c;全球领先的安永会计师事务所&#xff08;以下简称“安永”&#xff09;合伙人造访了图为信息科技&#xff08;深圳&#xff09;有限公司&#xff08;以下简称“图为科技”&#xff09;。 安永就财务管理工作的全球化战略提供专业指导意见&#xff0c;并为双方…