Запрос JSON-структуры в Angular: найдите правильный индекс и получите определенное свойство

Предположим, существует следующая структура 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?

3 ответа

Решение

нг-лодаш это элегантный способ:

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

Если вы ищете более "однострочное" решение, вы можете использовать функцию массива 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

Вам придется перебрать массив и вернуть свойство объекта, которое соответствует заданному идентификатору:

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;
        }
    }
};
Другие вопросы по тегам