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)