如何在javascript中检查对象数组和另一个对象数组之间的空数组

如何在javascript中检查对象数组和另一个对象数组之间的空数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象和groupKey的权限数组。我想在权限和groupKey之间进行筛选。如果对象的权限数组(属性为空数组[]),则将删除groupkey(文章、期刊)。例如,这里的文章和期刊是空数组[] let permission = [{ Book: [{ label: "Can View", value: "can_view" } ] }, {

我有一个对象和groupKey的权限数组。我想在权限和groupKey之间进行筛选。如果对象的权限数组(属性为空数组[]),则将删除groupkey(文章、期刊)。例如,这里的文章和期刊是空数组[]

let permission = [{
            Book: [{
                label: "Can View",
                value: "can_view"
            } ]
        },
       {
            Test: [{
                label: "Can View",
                value: "can_view"
            } ]
        }, , {
            Articles: []
        } ,{
            Journals: []
        } 
    ]

const groupKey = [    
 {label: "Book", value: "Book"},
 {label: "Test", value: "test"},
 {label: "Articles", value: "Articlefull"},
 {label: "Journals", value: "Journal"},
]
我接受的输出是

 let groupKey = [    
     {label: "Book", value: "Book"},
     {label: "Test", value: "test"},
    ]

我正在使用过滤方法,但我没有找到解决方案

权限数组中任意数量输入的通用解决方案:

(这需要groupKey的类型为
var
,而不是
const

var权限=[
{
书籍:[{
标签:“可以查看”,
值:“可以查看”
}]
},
{
测试:[{
标签:“可以查看”,
值:“可以查看”
}]
},
{
条款:[]
}, {
期刊:[]
} 
]
var groupKey=[
{标签:“书”,值:“书”},
{标签:“测试”,值:“测试”},
{标签:“Articles”,值:“Articlefull”},
{标签:“日记账”,值:“日记账”},
]
权限.forEach(功能(obj){
var key=Object.keys(obj)[0];
如果(!obj[key].length){
从组密钥(密钥)中移除;
}
})
var filteredArray=[];
函数removeFromGroupKey(键){
filteredArray=groupKey.filter(函数(obj){
返回obj.label!=键;
});
groupKey=filteredArray.slice();
}

console.log(“Final groupKey”,groupKey)
权限数组中任意数量输入的通用解决方案:

(这需要groupKey的类型为
var
,而不是
const

var权限=[
{
书籍:[{
标签:“可以查看”,
值:“可以查看”
}]
},
{
测试:[{
标签:“可以查看”,
值:“可以查看”
}]
},
{
条款:[]
}, {
期刊:[]
} 
]
var groupKey=[
{标签:“书”,值:“书”},
{标签:“测试”,值:“测试”},
{标签:“Articles”,值:“Articlefull”},
{标签:“日记账”,值:“日记账”},
]
权限.forEach(功能(obj){
var key=Object.keys(obj)[0];
如果(!obj[key].length){
从组密钥(密钥)中移除;
}
})
var filteredArray=[];
函数removeFromGroupKey(键){
filteredArray=groupKey.filter(函数(obj){
返回obj.label!=键;
});
groupKey=filteredArray.slice();
}

console.log(“Final groupKey”,groupKey)
来自
对象。条目
取出项目的
,使用
value.length>0检查数组是否为空,然后检查是否存在与该键匹配的标签(如果存在),将项目推入
数组

const权限=[
{
书籍:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
{
测试:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
,
{
条款:[]
},
{
期刊:[]
}
];
常量组键=[
{标签:“书”,值:“书”},
{标签:“测试”,值:“测试”},
{标签:“Articles”,值:“Articlefull”},
{标签:“日记账”,值:“日记账”}
];
设NewGrpKey=[];
permission.map(perm=>{
让key=Object.entries(perm)[0][0];
let value=Object.entries(perm)[0][1];
value.length>0&&
纽格普基(
groupKey.find(GrpItem=>{
返回GrpItem.label==键;
})
);
});

console.log(NewGrpKey)来自
对象。条目
取出项目的
,使用
值检查数组是否为空。长度>0
然后检查是否有与键匹配的标签(如果存在),将项目推到
数组中

const权限=[
{
书籍:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
{
测试:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
,
{
条款:[]
},
{
期刊:[]
}
];
常量组键=[
{标签:“书”,值:“书”},
{标签:“测试”,值:“测试”},
{标签:“Articles”,值:“Articlefull”},
{标签:“日记账”,值:“日记账”}
];
设NewGrpKey=[];
permission.map(perm=>{
让key=Object.entries(perm)[0][0];
let value=Object.entries(perm)[0][1];
value.length>0&&
纽格普基(
groupKey.find(GrpItem=>{
返回GrpItem.label==键;
})
);
});

console.log(NewGrpKey)
您也可以通过使用
过滤器和
一些
阵列原型来实现

filter()
方法使用通过的所有元素创建一个新数组 由提供的函数实现的测试

some()
方法测试数组中是否至少有一个元素 通过所提供函数实现的测试。它返回一个 布尔值

let权限=[
{
书籍:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
{
测试:[
{
标签:“可以查看”,
值:“可以查看”
}
]
},
{
条款:[]
},
{
期刊:[]
}
];
常量组键=[
{标签:“书”,值:“书”},
{标签:“测试”,值:“测试”},
{标签:“Articles”,值:“Articlefull”},
{标签:“日记账”,值:“日记账”}
];
const res=groupKey.filter(value=>(permission.some(ob=>typeof ob[value.label]!='undefined'&&ob[value.label].length>0));
控制台日志(res)
。作为控制台包装器{
最小高度:100%!重要;

}
您还可以使用
过滤器和
一些
阵列原型来实现这一点

filter()
方法使用通过的所有元素创建一个新数组 由提供的函数实现的测试

some()
方法测试是否至少有一个ele
const keys = new Map(groupKey.map(l => [l.label, l]));
const result = permission.reduce((a, c) => {
    for (let key in c) {
        if (keys.has(key) && c[key].length > 0) {
            a.push(keys.get(key));
        }
    }
    return a;
}, []);

console.log(result);