Querying a JSON-Structure in Angular: Find the right index and get a certain 属性 of it

Querying a JSON-Structure in Angular: Find the right index and get a certain property of it

假设以下 JSON 结构已存在:

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

并存储在$rootScope.roles中。

我需要的是:

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

我如何在 Angular 中做到这一点?

您将必须遍历数组和 return 与给定 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;
        }
    }
};

如果你正在寻找更"single-line"的解决方案,你可以使用JS数组函数find:

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

当找不到时,find returns null 所以我用 {} 替换了那个可能的结果,所以它在访问 [= 时不会抛出异常15=]。这样当找不到指定的 role_id 时它将 return undefined

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

中有更多信息

另一种 "single-line" 更稳定的解决方案是使用 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

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

role_name = lodash.pluck(lodash.where($rootScope.roles,{'role_id': 2 }),'role_name');