这是用户数据的JSON。
result = {
"id": 5529,
"roles": [
{
"id": 10,
"name": "ADMIN",
"privileges": [
{
"id": 100,
"name": "ADD",
"systemId": 3
},
{
"id": 115,
"name": "DEL",
"systemId": 3
}
]
}
]
}
必须检查List中存在的给定权限值并返回true或false。
尝试了几个代码但没有按预期工作,下面给出了一个尝试过的代码。 这里的特权= DEL,那么它应该返回true。
result.roles.forEach((element:any) => {
element.privileges.filter(function(item:any){
if(item.name === privilege)
return true;
else
return false;
});
如何有效地检查数组内的数组并根据值进行过滤并返回结果。
答案 0 :(得分:1)
虽然forEach函数在原始数组上运行,但滤波器功能不起作用。它将过滤后的数组作为输出。所以你正在过滤内部的数据,但它没有被分配到实际的数组。
试试这个,
result.roles.forEach((element) => {
element.privileges = element.privileges.filter(function (item) {
return item.name === privilege
})
})
编辑: - 我希望这是你正在寻找的继续你的开始。
let val = result.roles.filter((element) => {
return element.privileges.filter(function (item) {
return item.name === privilege
}).length != 0
}).length != 0
编辑2: - 然而,一个更有效和易于理解的解决方案
function check() {
for(role of result.roles){
for(tmpprivilege of role.privileges){
if(tmpprivilege.name === privilege){
return true;
}
}
}
return false;
}
let val = check()
console.log(val)
答案 1 :(得分:0)
result.roles.forEach((element:any)=> {
使用some
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
result.roles.some((element:any) => {
return element.privileges.filter(function(item:any){
if(item.name === privilege)
return true;
else
return false;
}).length;
答案 2 :(得分:0)
角度可以用于:
function filterTable(result:any){
let tmpArray: any=[]
for (let result of this. result.roles){
for(let priv of result.privileges){
if(priv.name==="DEL"){
tmpArray.push(result)
}
}
return tmpArray;}