2017-08-29 48 views
0

这是用户数据的JSON。检查数组内的数组并根据角度值2过滤

result = { 
    "id": 5529, 
    "roles": [ 
    { 
     "id": 10, 
     "name": "ADMIN", 
     "privileges": [ 
     { 
      "id": 100, 
      "name": "ADD", 
      "systemId": 3 
     }, 
     { 
      "id": 115, 
      "name": "DEL", 
      "systemId": 3 
     } 
     ] 
    } 
    ] 
} 

必须检查List中存在的给定特权值并返回true或false。

尝试了几个代码,但没有按预期工作,下面给出了一个这样的代码尝试。 这里privilege = DEL,那么它应该返回true。

result.roles.forEach((element:any) => { 
        element.privileges.filter(function(item:any){ 
      if(item.name === privilege) 
       return true; 
      else 
       return false; 
      }); 

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

+0

BTW,而不是'如果(item.name ===特权) 回归真实; else return false; });'你可以只写'return item.name ===特权;' –

+0

它不返回任何值。 – user630209

回答

1

虽然forEach函数在原始数组上运行,但Filter函数不会e过滤数组作为输出。所以你正在过滤里面的数据,但它没有被分配给实际的数组。

试试这个,

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) 
+0

即使具有匹配的数据,它也不会返回任何结果。 – user630209

+0

检查编辑,我已经给它一个尝试,但你的要求有点不清楚,你究竟想要什么。请详细说明场景 –

+0

我需要从这个满足相等的条件返回,将该值保存在变量中或从方法返回。 – user630209

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;} 
+0

这个我们可以在angular2中实现,但是如何返回这个值是我的问题 – user630209

+0

现在你的结果是tmpArray,你可以返回它。 – kjppster