vue3中處理不同數(shù)據(jù)結構JSON的實現(xiàn)
有時候,后端返回的JSON數(shù)據(jù)格式,是前端不需要的格式類型,這時,要么讓后端修改,你要什么格式,那么讓后端大哥哥給你返回什么格式。但是有時候不盡人意,后端大哥哥讓你自己轉換,此時就甩給前端了,只能在前端自己處理了。
1.對后端數(shù)據(jù)的字段值/字段進行操作
后端的JSON格式:
//后端返回的數(shù)據(jù)格式
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), //把字符串轉換數(shù)字類型
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), //把字符串轉換數(shù)字類型
age: res.age + 1, //給每一個人加一歲
name1: res.name.substring(0, 2), //把name的值截取2位,并且需要name1字段
mark:res.id+res.name
}
})
console.log(...data1) //...表示返回每一個元素效果

2.處理多層級的數(shù)據(jù)結構
后端的JSON格式:
//后端返回的數(shù)據(jù)格式
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中,把前面的數(shù)據(jù)加上
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數(shù)據(jù)格式:
//后端返回的數(shù)據(jù)格式
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'
}
]
}]
}])根據(jù)key的值排序
//根據(jù)根據(jù)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') //調用,根據(jù)key的值排序
console.log(...data.value) //...表示返回每一個元素
console.log(JSON.stringify(data.value)) //返回字符串效果,降序排列

4.實際案例
1.在使用uCharts時,經常需要進行數(shù)據(jù)轉換

2.把res轉成res1格式,因為res1是需要的

3.定義 res
let res = ref(
[{
"name": "的方式是大多數(shù)",
"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.value6.效果


上面的方式可以實現(xiàn),沒有問題,應該還有別的方式也行。
到此這篇關于vue3中處理不同數(shù)據(jù)結構JSON的實現(xiàn)的文章就介紹到這了,更多相關vue3處理JSON內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue-cli如何關閉Uncaught?error的全屏提示
這篇文章主要介紹了vue-cli如何關閉Uncaught?error的全屏提示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
vue3緩存頁面keep-alive及路由統(tǒng)一處理詳解
當我們不想每次跳轉路由都會重新加載頁面時(重新加載頁面很耗時),就可以考慮使用keep-alive緩存頁面了,這篇文章主要給大家介紹了關于vue3緩存頁面keep-alive及路由統(tǒng)一處理的相關資料,需要的朋友可以參考下2021-10-10

