Допустим, у меня есть объект ниже:
{
"schema": [
{
"field": "name",
"type": "String",
"enabled": true
},
{
"field": "age",
"type": "Int",
"enabled": false
},
{
"field": "modelObj",
"type": "object",
"enabled": true,
"stuff": [
{
"name": "mod1",
"type": "array",
"enabled": true
},
{
"name": "mod2",
"type": "String",
"enabled": false
},
{
"name": "mod3",
"type": "array",
"enabled": true
}
]
},
{
"name": "modelArr",
"type": "array",
"enabled": false,
"elements": {
"elementsType": "String"
}
},
{
"name": "modelsNestedArr",
"type": "array",
"enabled": true,
"elements": {
"elementsType": "object"
},
"stuff": [
{
"name": "name",
"type": "String",
"enabled": true
},
{
"name": "models",
"type": "array",
"enabled": false,
"elements": {
"elementsType": "String"
}
}
]
}
]
}
Я хочу рекурсивно пройти по этому объекту и, если установлено значение «enabled», удалить этот элемент.
Итак, ожидаемый результат:
[
{
"field": "name",
"type": "String",
"enabled": true
},
{
"field": "modelObj",
"type": "object",
"enabled": true,
"stuff": [
{
"name": "mod1",
"type": "array",
"enabled": true
},
{
"name": "mod3",
"type": "array",
"enabled": true
}
]
},
{
"name": "modelsNestedArr",
"type": "array",
"enabled": true,
"elements": {
"elementsType": "object"
},
"stuff": [
{
"name": "name",
"type": "String",
"enabled": true
}
]
}
]
Я написал код, приведенный ниже:
function r(a){
for (i = a.length - 1; i >= 0; --i) {
if(!a[i].enabled){
a.splice(i,1)
} else if (a[i].enabled){
if(a[i].type == "object"){
if(a[i]){
a[i].stuff= r(a[i].stuff)
}
} else if (a[i].type == "array"){
if(a[i].hasOwnProperty("elements") && a[i].elements.elementsType== "object"){
a[i].stuff= r(a[i].stuff)
}
}
}
}
return a
}
var final = r(a.schema)
console.log(JSON.stringify(final))
Но с этим я получаю следующий вывод:
Вывод с ошибкой:
[
{
"field": "name",
"type": "String",
"enabled": true
},
{
"field": "age",
"type": "Int",
"enabled": false
},
{
"field": "modelObj",
"type": "object",
"enabled": true,
"stuff": [
{
"name": "mod1",
"type": "array",
"enabled": true
},
{
"name": "mod2",
"type": "String",
"enabled": false
},
{
"name": "mod3",
"type": "array",
"enabled": true
}
]
},
{
"name": "modelArr",
"type": "array",
"enabled": false,
"elements": {
"elementsType": "String"
}
},
{
"name": "modelsNestedArr",
"type": "array",
"enabled": true,
"elements": {
"elementsType": "object"
},
"stuff": [
{
"name": "name",
"type": "String",
"enabled": true
}
]
}
]
Что именно я делаю не так?