Запрос 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;
}
}
};