原数据
const obj = {
"textA":32,
"textB":[
{
"1":"22"
},
],
"textC":[1,2,3],
"textD":{
"textD-1":["数量"],
"textD-2":[
{"name":"农副食品加工业","data":["2"]},
{"name":"水的生产和供应业","data":["1"]}
],
"textD-3":{
"demo": [11],
"test": 22
}
},
"textE": "textE",
"textF": true,
"textH": [[1],[{2:{1:[{2:[1]}]}}],[3]]
}
处理方法 进行深度递归
const fomatterData = data => {
const result = {};
for (let key in data) {
const type = judgeType(data[key]);
if (type !== "Object" && type !== "Array") {
result[key] = type;
} else if(type === "Array"){
const res = formatterDeepArray(data[key])
result[key] = res
}else{
result[key] = fomatterData(data[key])
}
}
return result
};
准确判断类型
const judgeType = data => {
const res = Object.prototype.toString.call(data);
return /^\[object (.*)\]$/.exec(res)[1];
};
处理类型为数据时候的递归
const formatterDeepArray = (data)=>{
let result
if(data.length === 0) {
result = "any"
} else{
result = []
data.map((i)=>{
const type = judgeType(i)
if (type !== "Object" && type !== "Array") {
result.push(`${type}`)
} else if(type === "Array"){
result.push(formatterDeepArray(i))
}else{
result.push(fomatterData(i))
}
})
}
return result
}
结果
{
"textA": "Number",
"textB": [
{
"1": "String"
}
],
"textC": [
"Number",
"Number",
"Number"
],
"textD": {
"textD-1": [
"String"
],
"textD-2": [
{
"name": "String",
"data": [
"String"
]
},
{
"name": "String",
"data": [
"String"
]
}
],
"textD-3": {
"demo": [
"Number"
],
"test": "Number"
}
},
"textE": "String",
"textF": "Boolean",
"textH": [
[
"Number"
],
[
{
"2": {
"1": [
{
"2": [
"Number"
]
}
]
}
}
],
[
"Number"
]
]
}