vue3中前端处理不同数据结构的JSON

news2024/11/26 16:22:46

        有时候,后端返回的JSON数据格式,是前端不需要的格式类型,这时,要么让后端修改,你要什么格式,那么让后端大哥哥给你返回什么格式。但是有时候不尽人意,后端大哥哥让你自己转换,此时就甩给前端了,只能在前端自己处理了。

目录

1.对后端数据的字段值/字段进行操作

2.处理多层级的数据结构

3.对JSON的字段进行排序 

4.实际案例


1.对后端数据的字段值/字段进行操作

后端的JSON格式:

		//后端返回的数据格式
		var data = ref([{
				id: '00111322',
				name: 'zs01',
				age: 18
			},
			{
				id: '00035565644',
				name: 'ls02',
				age: 20
			}
		])

1.对字段的值进行更改

		//返回的格式
		var data1 = data.value.map(res => {
			return {
				...res, //...使用es6语法,表示每一个对象,这里指的就是 {id: '00111322',name: 'zs01',age: 18}
				id: Number(res.id), //把字符串转换数字类型
				age: res.age + 1, //给每一个人加一岁
				name: res.name.substring(0, 2) //把name的值截取2位
			}
		})

		console.log(...data1) //...表示返回每一个元素

效果 

2.对字段进行操作

	//返回的格式
		var data1 = data.value.map(res => {
			return {
				...res, //...使用es6语法,表示每一个对象,这里指的就是 {id: '00111322',name: 'zs01',age: 18}
				id: Number(res.id), //把字符串转换数字类型
				age: res.age + 1, //给每一个人加一岁
				name1: res.name.substring(0, 2), //把name的值截取2位,并且需要name1字段
				mark:res.id+res.name
			}
		})

		console.log(...data1) //...表示返回每一个元素

效果 

2.处理多层级的数据结构

后端的JSON格式:

//后端返回的数据格式
		var data = ref([{
			title: '一号楼',
			key: '100',
			children: [{
				title: '一单元',
				key: '110',
				children: [{
						title: '房间1',
						key: '111'
					},
					{
						title: '房间2',
						key: '112'
					}
				]
			}]
		}])

1.修改字段操作

		//把title和key,分别改成id和name,一一对应起来,返回的格式 ,使用递归的方式
		function formatData(data1) {
			data1.forEach(res => {
				res.id = res.key;
				res.name = res.title;
				delete res.key;
				delete res.title;
				if (res.children) {
					formatData(res.children)
				}
			})
		}
		formatData(data.value) //调用
		console.log(...data.value) //...表示返回每一个元素
		console.log(JSON.stringify(data.value)) //返回字符串

效果

 

2.修改字段的值操作

//在最后一个字段title中,把前面的数据加上
		function formatData(data1, text) {
			data1.forEach(res => {
				if (!res.children) {
					res.title = text + res.title
				}

				if (res.children) {
					text += res.title;
					formatData(res.children, text)
				}
			})
		}

		formatData(data.value, '') //调用
		console.log(...data.value) //...表示返回每一个元素
		console.log(JSON.stringify(data.value)) //返回字符串

效果

 

3.对JSON的字段进行排序 

后端JSON数据格式:

//后端返回的数据格式
		var data = ref([{
			title: '一号楼',
			key: '100',
			children: [{
				title: '一单元',
				key: '110',
				children: [{
						title: '房间1',
						key: '111'
					},
					{
						title: '房间2',
						key: '112'
					}
				]
			}]
		}, {
			title: '二号楼',
			key: '200',
			children: [{
				title: '二单元',
				key: '210',
				children: [{
						title: '房间1',
						key: '211'
					},
					{
						title: '房间2',
						key: '212'
					}
				]
			}]
		}])

根据key的值排序

	//根据根据key的值排序
		const compare = p => (m, n) => n[p] - m[p]; //简写排序,可以参考JavaScript中sort() 方法   
		//m[p] - n[p]升序    n[p] - m[p] 降序

		function formatData(data1, sortField) { //key:需要排序的字段
			data1.sort(compare(sortField));
			data1.forEach(res => {
				if (!res.children) {
					return;
				} else {
					formatData(res.children, sortField);
				}
			});
		}

		formatData(data.value, 'key') //调用,根据key的值排序
		console.log(...data.value) //...表示返回每一个元素
		console.log(JSON.stringify(data.value)) //返回字符串

效果,降序排列

 

4.实际案例

1.在使用uCharts时,经常需要进行数据转换

2.把res转成res1格式,因为res1是需要的

3.定义 res

	let res = ref(
		[{
				"name": "的方式是大多数",
				"value": 6
			},
			{
				"name": "yqwuwiyvui",
				"value": 3
			},
			{
				"name": "sdsfsdf",
				"value": 2
			},
			{
				"name": "wewerw",
				"value": 6
			}
		]
	)

4.定义res1和res1s,因为res1s是res1中series的值

	let res1 = ref({
		categories: [],
		series: []
	})
	let res1s = ref({
		name: "",
		data: []
	})

5.转换

		res.value.forEach((va) => {
			res1.value.categories.push(va.name)
			res1s.value.data.push(va.value)
		})
		res1s.value.name = "目标值"
		res1.value.series.push(res1s.value)
		chartData.value = res1.value

6.效果

 

上面的方式可以实现,没有问题,应该还有别的方式也行。

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

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

相关文章

【javaScript面试题】2023前端最新版javaScript模块,高频24问

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的关于javaScript的面试题 目录 一、2023javaScript面试题精选 1.js的数据类型…

Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch)

Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch) 文章目录Temporal Fusion Transformer (TFT) 各模块功能和代码解析(pytorch)GLU(Gated Linear Unit)模块GRN(Gated Residual Network)门控残差网络Transformer经典模块Add&Normalize模块Scaled Dot-Produ…

【Leetcode】【简单】704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…

HNU工训中心:数模转换实验报告

D 级任务:实验 74194 的仿真验证 1. 实验任务 任务:实验 74194 的仿真验证,掌握 Quartus 仿真的基本原则和常规步骤,记录移 位寄存器的数据读写,并描述仿真波形,结果分析并记录到实验报告。 实验实作 最终的电路图…

“探索未来:VR全景直播技术引领新媒体时代”

随着虚拟现实技术的不断发展,VR全景直播已经成为了越来越受欢迎的直播形式。VR全景直播可以让观众通过虚拟现实设备亲临直播现场,享受身临其境的观看体验。VR全景直播是什么? VR全景直播是虚拟现实技术和直播的结合。相对于传统直播&#xff…

SOLIDWORKS提升 SAE赛车队成绩

SOLIDWORKS Education Edition实施结果: ●将车队成绩提升至史上最高水平 ●使用仿真工具验证赛车设计 ●促进车队成员之间的交流 ●增强设计可视化试用及报价新罕布什尔大学是美国顶级研究机构之一。UNH 拥有多个学术部门、跨学科机构和研究中心,屹立在…

APP发布----HBuilder

pc端:桌面应用:electronjs–vasode web应用: 纯前端开发—vue、react等框架 混合开发 — php、jsp、asp App开发类型 原生开发: Jave – AndroidObject – iosc – 鸿蒙运行效率最高、开发复杂、页面一致性 web-app(…

新C++(12):位图与海量数据处理

"无关利弊或对错,勇气一直在"现在给你一道面试题:给40亿个不重复的无符号整数,没有任何排序。给出一个无符号整数,如何快速地判断,该数是否存在于40亿多个这样的无符号整数之中?唔……我想将这40亿个多数进行…

25- 卷积神经网络(CNN)原理 (TensorFlow系列) (深度学习)

知识要点 卷积神经网络的几个主要结构: 卷积层(Convolutions): Valid :不填充,也就是最终大小为卷积后的大小. Same:输出大小与原图大小一致,那么N ​变成了​N2P. padding-零填充. 池化层(Subsampli…

STM32HAL库1:认识时钟树(STM32F407)

目录 1.认识时钟树 1.1什么时钟 1.2认识时钟树 2.配置系统时钟 2.1系统适中的配置过程 2.2外设时钟使能和失能 2.3sys_stm32_clock_init函数(F407) 2.4SystemClock_Config函数(F407) [F1] [F4] 1.认识时钟树 1.1什么时钟 …

【禅道测试环境搭建及安装】Linux上的禅道安装教程,从环境搭建开始

目录 一、操作环境 二、安装VMware 三、安装FinalShell 四、在VMware里安装CentOS 1.前置:CentOS的下载 2.CentOS的安装 3.查看网络 五、用宿主机连接远程的虚拟机 六、禅道包的下载与CentOS配置的修改 七、上传项目包并安装禅道 一、操作环境 Windows 10…

Substrate 基础教程(Tutorials) -- 授权特定节点

五、授权特定节点 在添加可信节点中,您看到了如何使用一组已知的验证器节点构建一个简单的网络。该教程演示了一个简化版的许可网络(permissioned network)。在一个被许可的网络中,只有被授权的节点(authorized nodes…

STM32CubexMX与FreeRTOS学习

FreeRTOS结合MX软件开发,基础配置直接生成,我们只需要会操作即可,操作一些API函数,注意事项就是:头文件、二值信号量一开始就有、定时器需要打开并且配置周期 1-LED-EXTI 上下拉模式和触发模式不要选择错误 void HAL_…

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

作者:Radovan Ondas 在本文章,我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境,然后导入 NLP 模型,最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 >> 如何设置环境 第一步…

【11】linux命令每日分享——useradd添加用户

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

网页全屏截图、在线截图API

在我们的数字时代,网页截图已经成为了一个非常常见的需求,无论是为了记录网页信息、保存重要信息或是与他人分享自己看到的内容,截图工具都是必不可少的。今天,我想向大家推荐一个非常好用的在线网页全屏截图工具,它的…

获取html元素相对屏幕的位置

1. 写在前面 Javascript 由三部分构成,ECMAScript,DOM和BOM。 ECMAScript(核心)   描述了JS的语法和基本对象 Bom:(browser object model);浏览器对象模型,提供一些属性和方法可以操作浏览器,浏览器可…

【spring】Spring Data --Spring Data JPA

Spring Data 的委托是为数据访问提供熟悉且符合 Spring 的编程模型,同时仍保留着相关数据存储的特​​殊特征。 它使使用数据访问技术、关系和非关系数据库、map-reduce 框架和基于云的数据服务变得容易。这是一个伞形项目,其中包含许多特定于给定数据库…

详述java的设计模式(二)

1.工厂模式 简单工厂模式(Simple Factory Pattern)属于创建型模式,是指由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的对象,而被创建的对象通常都具有共同的父类或接口,这种模式又叫做静态工…

数据结构和算法学习

文章目录精通一个领域切题四件套算法算法的五个条件流程图数据结构数据与信息数据信息数据结构和算法数据结构算法时间复杂度空间复杂度数组 Array优点缺点数组和链表的区别时间复杂度链表 Linked List优点缺点时间复杂度单向链表双向链表循环链表双向循环链表堆栈 Stack队列 Q…