2015-11-04 3 views
0

Предполагает, следующие JSON структуры существующий:Запросы к 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 

Как я могу сделать это в Угловом?

+0

Взгляните на это: http://stackoverflow.com/questions/12462318/find-a-value-in-an-array-of-objects-in-javascript Помогает ли это? – Rodmentou

ответ

0

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

role_name = lodash.pluck(lodash.where($rootScope.roles,{'role_id': 2 }),'role_name'); 
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; 
     } 
    } 
}; 
+0

, это нормально, но не изящное решение, должно быть лучше, чем цикл итерации, не так ли? –

+0

Как я знаю, у подчеркивания есть метод, возможно, я должен включить его в проект? –

+0

Я полагаю ... в любом случае подчеркивание будет зацикливать массив за кулисами ... Если у вас нет карты, нет способа сделать это без цикла. – taxicala

0

Если вы ищете более решение «одной линии», вы можете использовать JS функция массива find:

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

Когда он не найден, то возвращается findnull так что я замещенными, что возможный результат по {} поэтому d oes не генерирует исключение при доступе к . Таким образом он вернет 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