检查数组内的数组并根据角度2中的值进行过滤

时间:2017-08-29 05:44:31

标签: typescript

这是用户数据的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;
            });

如何有效地检查数组内的数组并根据值进行过滤并返回结果。

3 个答案:

答案 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;}