[英]Filter nested JSON in angular
我有从JSON对象生成的大型菜单,如下所示:
[
{
"name":"Menu Item 1",
"id":"8",
"children":[
{
"name":"Sub Menu 1-1",
"id":"1",
"children":[
{
"name":"Sub Menu 1.1.1",
"id":"2"
},
{
"name":"Sub Menu 1.1.2",
"id":"3"
}
]
},
{
"name":"Sub Menu 1.2",
"id":"4"
}
]
},
{
"name":"Menu Item 2",
"id":"7",
"children":[
{
"name":"Sub Menu 2.1",
"id":"5"
},
{
"name":"Sub Menu 2.2",
"id":"6"
}
]
}
]
如何创建自定义过滤器,以递归方式仅按名称检索匹配的项目,而无需更改原始结构?
尝试这个。
var menuItems =[{ name: 'Menu Item 1', id: '8', children:[{ name: 'Sub Menu 1-1', id: '1', children: [{ name: 'Sub Menu 1.1.1', id: '2' }, { name: 'Sub Menu 1.1.2', id: '3' }] }, { name: 'Sub Menu 1.2', id: '4' }]},{ name: 'Menu Item 2', id: '7', children: [{ name: 'Sub Menu 2.1', id: '5' }, { name: 'Sub Menu 2.2', id: '6' }] }]; var result = []; function isObject(obj) { return (!!obj.name && !!obj.id); } function hasChildren(obj) { return !!obj.children && Array.isArray(obj.children); } function getNameList(item, matchName) { if(Array.isArray(item)) { for(var i = 0; i < item.length; i++) { if(hasChildren(item[i])) { getNameList(item[i].children, matchName); } if(isObject(item[i])) { if(matchName == item[i].name) result.push(item[i]); } } } } getNameList(menuItems, 'Menu Item 1'); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.