Javascript 如何递归地从嵌套JSON中删除所有空数组子项[]
我有一个JSON响应,如下所示。我正在使用来自我的GeorgeRegionCountries的嵌套JSON数据APIController&自定义类TreeView用于根据我正在使用的插件所需的嵌套结构格式化数据。我正在使用一个组合多选树视图使用这个jquery插件多选下拉树插件你可以通过这个链接看到它 我想删除所有带有空数组的“sub”Javascript 如何递归地从嵌套JSON中删除所有空数组子项[],javascript,jquery,json,lodash,Javascript,Jquery,Json,Lodash,我有一个JSON响应,如下所示。我正在使用来自我的GeorgeRegionCountries的嵌套JSON数据APIController&自定义类TreeView用于根据我正在使用的插件所需的嵌套结构格式化数据。我正在使用一个组合多选树视图使用这个jquery插件多选下拉树插件你可以通过这个链接看到它 我想删除所有带有空数组的“sub” [ { "Id": 1, "Title": "United States"
[
{
"Id": 1,
"Title": "United States",
"ParentId": null,
"Subs": [
{
"Id": 7,
"Title": "Northwest",
"ParentId": 1
},
{
"Id": 8,
"Title": "Northeast",
"ParentId": 1
},
{
"Id": 9,
"Title": "Central",
"ParentId": 1
},
{
"Id": 10,
"Title": "Southwest",
"ParentId": 1
},
{
"Id": 18,
"Title": "Southeast",
"ParentId": 1
}
]
},
{
"Id": 2,
"Title": "Canada",
"ParentId": null
},
{
"Id": 3,
"Title": "France",
"ParentId": null
},
{
"Id": 4,
"Title": "Germany",
"ParentId": null
},
{
"Id": 5,
"Title": "Australia",
"ParentId": null
},
{
"Id": 6,
"Title": "United Kingdom",
"ParentId": null
}
]
深层清洁的最好方法是什么?我在Stackopverflow中尝试了不同的解决方案,但我得到的只是对象,而不是空的sub,这是我不想要的
[
{
"Id": 1,
"Title": "United States",
"ParentId": null,
"Subs": [
{
"Id": 7,
"Title": "Northwest",
"ParentId": 1,
Object object
},
{
"Id": 8,
"Title": "Northeast",
"ParentId": 1,
Object object
},
{
"Id": 9,
"Title": "Central",
"ParentId": 1,
Object object
},
{
"Id": 10,
"Title": "Southwest",
"ParentId": 1,
Object object
},
{
"Id": 18,
"Title": "Southeast",
"ParentId": 1,
Object object
}
]
},
{
"Id": 2,
"Title": "Canada",
"ParentId": null,
Object object
},
{
"Id": 3,
"Title": "France",
"ParentId": null,
Object object
},
{
"Id": 4,
"Title": "Germany",
"ParentId": null,
Object object
},
{
"Id": 5,
"Title": "Australia",
"ParentId": null,
Object object
},
{
"Id": 6,
"Title": "United Kingdom",
"ParentId": null,
Object object
}
]
这不是我想要的正确答案是:
let数组=[
{
“Id”:1,
"标题":"美国",,
“ParentId”:null,
“潜艇”:[
{
Id:7,,
"标题":"西北",,
“ParentId”:1,
‘Subs’:[]
},
{
Id:8,,
‘标题’:‘东北’,
“ParentId”:1,
‘Subs’:[]
},
{
“Id”:9,
“标题”:“中央”,
“ParentId”:1,
‘Subs’:[]
},
{
“Id”:10,
"标题":"西南",,
“ParentId”:1,
‘Subs’:[]
},
{
Id:18,
‘头衔’:‘东南’,
“ParentId”:1,
‘Subs’:[]
}
]
},
{
“Id”:2,
‘头衔’:‘加拿大’,
“ParentId”:null,
‘Subs’:[]
},
{
"Id":3,,
‘标题’:‘法国’,
“ParentId”:null,
‘Subs’:[]
},
{
“Id”:4,
"标题":"德国",,
“ParentId”:null,
‘Subs’:[]
},
{
“Id”:5,
‘标题’:‘澳大利亚’,
“ParentId”:null,
‘Subs’:[]
},
{
“Id”:6,
‘头衔’:‘联合王国’,
“ParentId”:null,
‘Subs’:[]
}
]
让newArray=array.map(项=>{
if(item.Subs.length==0){
删除项目.Subs
退货项目
}
item.Subs=item.Subs.map(item=>{
if(item.Subs.length==0){
删除项目.Subs
退货项目
}
})
退货项目
}
)
console.log(newArray)
您可以使用..transform()
递归检查特定键(Subs
),并在其值为空时将其删除:
const{transform,isObject,isEmpty}=;
常量removempty=(对象,键)=>
变换(obj,(r,v,k)=>{
如果(k==key&&isEmpty(v))返回;
r[k]=等深线(v)?移除(v,键):v;
});
const tree=[{“Id”:1,“Title”:“United States”,“ParentId”:null,“Subs”:[{“Id”:7,“Title”:“Northwest”,“ParentId”:1,“Subs”:[]},{“Id”:8,“Title”:“Northwest”,“ParentId”:1,“Subs”:[]},{“Id”:10,“Title”:“Southwest”,“ParentId”:1,“Subs”:[]},{“Id”:18,“Title”:“东南”,“ParentId”:1,“Subs”:[]},{“Subs”:“加拿大”、“家长Id:null”,Subs:[]},{“Id:3”,Title:“法国”、“家长Id:null”,Subs:[]},{“Id:4”,Title:“德国”、“家长Id:null”,Subs:[]},{“Id:5”,Title:“澳大利亚”、“家长Id:null”,Subs:[]},{“Id:6”,Title:“英国”、“家长Id:null”,Subs:[]]
const result=removempty(树“Subs”);
console.log(结果);
let数据=[
{
“Id”:1,
“标题”:“美国”,
“ParentId”:空,
“潜艇”:[
{
“Id”:7,
“头衔”:“西北”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:8,
“头衔”:“东北”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:9,
“标题”:“中央”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:10,
“头衔”:“西南”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:18,
“头衔”:“东南”,
“家长ID”:1,
“潜艇”:[]
}
]
},
{
“Id”:2,
“标题”:“加拿大”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:3,
“标题”:“法国”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:4,
“标题”:“德国”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:5,
“标题”:“澳大利亚”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:6,
“标题”:“联合王国”,
“ParentId”:空,
“潜艇”:[]
}
];
data=data.map(行=>{
如果(!row.Subs.length){
设{Subs,…r}=行;
返回r;
}返回行
})
console.log(data);
编写两个函数,并将遍历数组的函数传递给数据映射函数,如下所示
函数格式数据(val){
如果(val.Subs.length>0)val.Subs.map(a=>a.Subs.length>0?格式化数据(a.Subs):deleteSubs(a));
else-deleteSubs(val);
返回val;
}
函数deleteSubs(val){
删除val.SUB;
}
风险值数据=[{
“Id”:1,
“标题”:“美国”,
“ParentId”:空,
“潜艇”:[{
“Id”:7,
“头衔”:“西北”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:8,
“头衔”:“东北”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:9,
“标题”:“中央”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:10,
“头衔”:“西南”,
“家长ID”:1,
“潜艇”:[]
},
{
“Id”:18,
“头衔”:“东南”,
“家长ID”:1,
“潜艇”:[]
}
]
},
{
“Id”:2,
“标题”:“加拿大”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:3,
“标题”:“法国”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:4,
“标题”:“德国”,
“ParentId”:空,
“潜艇”:[]
},
{
“Id”:5,
“标题”:“澳大利亚”,
“帕伦
[
{
"Id": 1,
"Title": "United States",
"ParentId": null,
"Subs": [
{
"Id": 7,
"Title": "Northwest",
"ParentId": 1,
Object object
},
{
"Id": 8,
"Title": "Northeast",
"ParentId": 1,
Object object
},
{
"Id": 9,
"Title": "Central",
"ParentId": 1,
Object object
},
{
"Id": 10,
"Title": "Southwest",
"ParentId": 1,
Object object
},
{
"Id": 18,
"Title": "Southeast",
"ParentId": 1,
Object object
}
]
},
{
"Id": 2,
"Title": "Canada",
"ParentId": null,
Object object
},
{
"Id": 3,
"Title": "France",
"ParentId": null,
Object object
},
{
"Id": 4,
"Title": "Germany",
"ParentId": null,
Object object
},
{
"Id": 5,
"Title": "Australia",
"ParentId": null,
Object object
},
{
"Id": 6,
"Title": "United Kingdom",
"ParentId": null,
Object object
}
]