場合によっては、バックエンドによって返される JSON データ形式は、フロントエンドが必要としない形式タイプであることがあります。このとき、バックエンドに変更させることができます。どのような形式が必要か、バックエンドのビッグ ブラザーに要求して、フォーマット。しかし、場合によっては満足できない場合があり、バックエンドの兄貴が自分で切り替えてくださいと要求し、そのときはフロントエンドに任せて、フロントエンドで自分が処理するしかありません。
目次
1.バックエンドデータのフィールド値/フィールドを操作します。
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.効果
上記の方法で問題なく実現できますが、他の方法もあるはずです。