vue3 でのさまざまなデータ構造の JSON のフロントエンド処理

        場合によっては、バックエンドによって返される 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的值排序
		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. res1 が必要なので、res を res1 形式に変換します。

3. 解像度を定義する

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

4. res1 と res1s を定義します。res1s は res1 の系列の値です。

	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.効果

 

上記の方法で問題なく実現できますが、他の方法もあるはずです。

おすすめ

転載: blog.csdn.net/u012563853/article/details/129315914