0

Assume, following JSON Structure is existing:

[
  {
    "role_id": 1,
    "role_name": "Admin"
  },
  {
    "role_id": 2,
    "role_name": "Editor"
  }
]

and stored in $rootScope.roles.

What I need is:

$rootScope.roles[index -> where role_id == 2].rolename  // gets -> Editor

How can I do that in Angular?

4

3 回答 3

0

ng-lodash是一种优雅的方式:

role_name = lodash.pluck(lodash.where($rootScope.roles,{'role_id': 2 }),'role_name');
于 2015-11-04T20:54:41.343 回答
0

您将不得不遍历数组并返回与给定 id 匹配的对象的属性:

function getRoleName(roleId) {
    for (var i = 0; i < $rootScope.roles.length; i++) {
        if ($rootScope.roles[i].role_id == roleId) {
            return $rootScope.roles[i].role_name;
        }
    }
};
于 2015-11-04T19:50:57.910 回答
0

如果您正在寻找更“单行”的解决方案,您可以使用 JS 数组函数find

($rootScope.roles.find(function (x) { return x.role_id == 2; }) || {}).role_name;

当它找不到时,find返回null所以我用这个可能的结果替换了它,{}所以它在访问时不会抛出异常null.role_name。这样它会在找不到undefined指定的时候返回。role_id

请注意,此方法是一项新技术,并非在每个浏览器中都可用,更多信息请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

另一个“单线”更稳定的解决方案是使用filter

($rootScope.roles.filter(function (x) { return x.role_id == 2; })[0] || {}).role_name;

这种其他方法更稳定,可以在每个浏览器中找到,更多信息在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

于 2015-11-04T20:43:13.583 回答