前言
本文章是开发中遇到的问题,对于后端返回的数据中需要进行筛选的问题
代码如下
后端返回的数据中很多是我不需要的,所以进行筛选,如果使用axios中发送请求获取数据的话,可以在拦截器中进行操作
数据:
let list = [
{
"id": 1,
"name": "11",
"code": "22",
"parentId": 0,
"level": 0,
"sort": 1,
"isActive": false,
"childList": [
{
"id": 3,
"name": "33",
"code": "22",
"parentId": 1,
"level": 1,
"sort": 1,
"isActive": false,
"childList": [
{
"id": 5,
"name": "55",
"code": "22",
"parentId": 3,
"level": 2,
"sort": 1,
"isActive": false,
"childList": null
},
{
"id": 6,
"name": "6",
"code": "22",
"parentId": 3,
"level": 2,
"sort": 1,
"isActive": true,
"childList": null
}
]
},
{
"id": 4,
"name": "44",
"code": "22",
"parentId": 1,
"level": 1,
"sort": 1,
"isActive": true,
"childList": []
}
]
},
{
"id": 2,
"name": "22",
"code": "22",
"parentId": 0,
"level": 0,
"sort": 1,
"isActive": false,
"childList": []
}
]
操作代码:
/* 遍历数组挑选深复制+改名 */
function arrHandle(arr) {
// 定义一个外围数组,用于保存所有数据
let newArr = []
arr.forEach(item => {
// 在循环是每循环到一个成员,定义一个对象,用于保存当前所有的数据
let obj = {}
// 使用for-in循环遍历对象获取对象的key
for (let i in item) {
// 利用instanceof判断对象该项是不是个数组,如果是那么进行递归,重新遍历保存
if (item[i] instanceof Array) {
obj.children = arrHandle(item[i])
} else if (['id','name','level'].inculdes(i)) { // 列出你所需要的key
// 进行改名操作,因为是对同一项进行判断,所以使用switch
const data = {
id: 'key',
name: 'title',
level: 'level'
}
obj[data[i]] = item[i]
// 如果不需要更改key的名称,那么可以直接进行添加
// obj[i] = item[i]
}
}
// 在遍历完成后将obj整个添加到外围数组中
newArr.push(obj)
})
// 染回外围数组
return newArr
}
输出结果:
本文主要是针对日常工作中遇到的一些小问题,如果有更好的方法,或发现错误留言,我会即使修改