zil*_*anu 6 javascript arrays javascript-objects underscore.js
我有一个以下格式的对象数组:
{
"country": "India",
"children": [
{
"name": "Karnataka",
"type": "State",
"children": [
{
"name": "",
"type": "city"
},
{
"name": "Bangalore",
"type": "city"
},
{
"name": "Mangalore",
"type": "city"
}
]
},
{
"name": "Kerala",
"type": "State",
"children": [
{
"name": "",
"type": "city"
}
]
},
{
"name": "Maharashtra",
"type": "State",
"children": [
{
"name": "Mumbai",
"type": "city"
},
{
"name": "Pune",
"type": "city"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
每个对象都有一个子元素,其中包含元素的详细信息.我需要递归遍历json对象并删除所有name空字符串直到根的节点.对于上面的json格式,输出应如下所示:
{
"country": "India",
"children": [
{
"name": "Karnataka",
"type": "State",
"children": [
{
"name": "Bangalore",
"type": "city"
},
{
"name": "Mangalore",
"type": "city"
}
]
},
{
"name": "Kerala",
"type": "State",
"children": [
]
},
{
"name": "Maharastra",
"type": "State",
"children": [
{
"name": "Mumbai",
"type": "city"
},
{
"name": "Pune",
"type": "city"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何使用Underscorejs以递归方式在javascript中执行此操作.
这是一个递归解决方案Array#filter()。
function filterName(a) {
if (a.name) {
if (Array.isArray(a.children)) {
a.children = a.children.filter(filterName);
}
return true;
}
}
var object = { "country": "India", "children": [{ "name": "Karnataka", "type": "State", "children": [{ "name": "", "type": "city" }, { "name": "Bangalore", "type": "city" }, { "name": "Mangalore", "type": "city" }] }, { "name": "Kerala", "type": "State", "children": [{ "name": "", "type": "city" }] }, { "name": "Maharashtra", "type": "State", "children": [{ "name": "Mumbai", "type": "city" }, { "name": "Pune", "type": "city" }] }] };
object.children.forEach(filterName);
document.write("<pre>" + JSON.stringify(object, 0, 4) + "</pre>");Run Code Online (Sandbox Code Playgroud)