Javascript 迭代数组并删除
我拥有一系列用户权限:Javascript 迭代数组并删除,javascript,Javascript,我拥有一系列用户权限: var权限=[“查看管理”、“查看配置”、…]; 以及包含用户菜单的数组: var items = [ { title: 'a' }, { title: 'b', rules: 'view_admin', sub: [ { title: 'ba', rules: 'view_admin1' } ] }, { title: 'c', sub: [ { title: 'ca', rules: 'view_con
var权限=[“查看管理”、“查看配置”、…];
以及包含用户菜单的数组:
var items = [
{ title: 'a' },
{ title: 'b', rules: 'view_admin', sub: [
{ title: 'ba', rules: 'view_admin1' }
] },
{ title: 'c', sub: [
{ title: 'ca', rules: 'view_config', sub: [
{ title: 'caa', rules: 'view_config1' },
{ title: 'cba' }
] }
] },
{ title: 'd', rules: 'view_other'}
];
我需要:
- 如果数组的对象不包含键“规则”,请维护该项
- 如果规则不在用户权限内,请删除该对象
- 如果规则为into sub且长度等于0,则删除整个sub, 因此,删除子目录中的项目
var items = [
{ title: 'a' },
{ title: 'b', rules: 'view_admin'},
{ title: 'c', sub: [
{ title: 'ca', rules: 'view_config', sub: [
{ title: 'cba' }
] }
] }
];
附言:我不知道可能有多少个“sub”
这是我尝试过的代码,但不起作用
var organizeMenu = function(items, permissions) {
for (var i = 0; i < items.length; i++) {
var title = items[i].title;
console.log(title);
if (items[i].rules && items[i].rules != '*') {
if (permissions.indexOf(items[i].rules) < 0) {
console.log("deleted");
delete items[i];
} else {
if (items[i].submenu) {
organizeMenu(items[i].submenu, permissions);
}
}
}
}
return items;
};
var organizeMenu=功能(项目、权限){
对于(变量i=0;i
我显然不想为您编写代码。尽管如此,我还是会编写伪代码来帮助您
定义函数,例如cleanItems(数组)
基于给定的对象结构, 这是我试过的 请检查一下
var permission = ["view_admin", "view_config"];
var items = [
{ title: 'a' },
{ title: 'b', rules: 'view_admin', sub: [
{ title: 'ba', rules: 'view_admin1' }
] },
{ title: 'c', sub: [
{ title: 'ca', rules: 'view_config', sub: [
{ title: 'caa', rules: 'view_config1' },
{ title: 'cba' }
] }
] },
{ title: 'd', rules: 'view_other'}
];
function checkInnerObject(arrItems){
arrItems.forEach(function(objOne,key){
if(objOne.hasOwnProperty("rules") || objOne.hasOwnProperty("sub")){
if(permission.indexOf(objOne.rules)>=0){
checkInnerObject(objOne.sub);
if(objOne.sub.length==0){
delete objOne.sub;
}
}else if(objOne.hasOwnProperty("sub")){
checkInnerObject(objOne.sub);
} else{
arrItems.splice(key,1);
}
}
})
}
checkInnerObject(items);
console.log(items)
您是否编写了任何代码来实现它?我们需要看看。这就是我的。。。你需要什么?好吧,那不是一个“为我做代码”的网站。我们在这里回答编程问题。如果你想做一些事情,那么试着去做,当你偶然发现一个你无法解决的问题时,回到我们身边。查看我尝试过的代码,但不能使用它…当发布一个不起作用的代码时,你还需要指定什么不起作用。它会崩溃吗?它不会产生你想要的输出吗?请仔细阅读。
}
return the processed array;
}
var permission = ["view_admin", "view_config"];
var items = [
{ title: 'a' },
{ title: 'b', rules: 'view_admin', sub: [
{ title: 'ba', rules: 'view_admin1' }
] },
{ title: 'c', sub: [
{ title: 'ca', rules: 'view_config', sub: [
{ title: 'caa', rules: 'view_config1' },
{ title: 'cba' }
] }
] },
{ title: 'd', rules: 'view_other'}
];
function checkInnerObject(arrItems){
arrItems.forEach(function(objOne,key){
if(objOne.hasOwnProperty("rules") || objOne.hasOwnProperty("sub")){
if(permission.indexOf(objOne.rules)>=0){
checkInnerObject(objOne.sub);
if(objOne.sub.length==0){
delete objOne.sub;
}
}else if(objOne.hasOwnProperty("sub")){
checkInnerObject(objOne.sub);
} else{
arrItems.splice(key,1);
}
}
})
}
checkInnerObject(items);
console.log(items)