2015-11-27 5 views
0

У меня есть следующий объект JSON (массив элементов)underscore.js как получить элемент из объекта JSON с помощью _.filter

var roles = [ 
     { 
     "label": "alpha", 
     "children": [ 
      {"label": "role1","title": "role1","value": "1"}, 
      {"label": "role2","title": "role2","value": "2"} 
     ] 
     }, 

     { 
     "label": "beta", 
     "children": [ 
      {"label": "role3","title": "role3","value": "3"}, 
      {"label": "role4","title": "role4","value": "4"} 
     ] 
     }, 

     { 
     "label": "delta", 
     "children": [ 
      {"label": "role5","title": "role5","value": "5"}, 
      {"label": "role6","title": "role6","value": "6"} 
     ] 
     } 
    ] 

Я пытаюсь получить (а затем удалить ..) ап элемент с определенной меткой

я определил, где объект

var where = {key: 'label', value:"alpha"}; 

и отфильтровать объект:

var filteredRoles = _.filter(roles, function (el) { 
    return el[where.key] && _.isArray(el[where.key]) && 
     _.indexOf(el[where.key], where.value) >= 0; 
}); 
console.log("found "+JSON.stringify(filteredRoles, null, 2)); 

, но я не могу получить: found = []

Где я ошибаюсь?

спасибо за обратную связь

+0

эль [where.key] не массив в данной выборке так _.isArray будет возвращать ложным –

+0

благодаря ! Я читал это много раз, заметив это ... слишком поздно ночью – erwin

+0

добавить комментарий как ответ, если хотите – erwin

ответ

1

попробовать этот

var result = _.filter(roles, function(role) { 
    return (role[where.key] === where.value) && _.isArray(role['children']); 
}) 

здесь является рабочим plunk