2016-03-16 2 views
0

У меня есть следующий пример JSONподуровней доступ JSON по имени

var data = { 
    "menu": [ 
    { 
     "name": "Event A", 
     "sub": [{ 
      "name": "Sub Event A 1", 
      "sub": null 
     }, 
     { 
      "name": "Sub Event A 2", 
      "sub": [{ 
       "name": "Sub Sub Event A 2", 
       "sub": null 
      }] 
     } 
     ] 
    }, 
    { 
     "name": "Event B", 
     "sub": [{ 
      "name": "Sub Event B 1", 
      "sub": null 
     }, 
     { 
      "name": "Sub Event B 2", 
      "sub": [{ 
       "name": "Sub Sub Event B 2", 
       "sub": null 
      }] 
     } 
     ] 
    } 
    ] 
} 

Когда я создаю меню можно легко выбрать, следует ли использовать Event A или Event B в качестве источника следующим образом:

$(data.menu[0].sub).each(function(){ /* menu[0] therefore first, Event A */ 
    $menu1.append(
     getMenuItem1(this) 
    ); 
}); 

Вопрос

можно выбрать это по значению name е IELD?

Что-то вроде: $(data.menu[name="Event A"].sub)

+1

Это не JSON, это объект инициализатора JavaScript. JSON - текстовая нотация для обмена данными. Если вы работаете с исходным кодом JavaScript и не имеете дело с * строкой *, вы не имеете дело с JSON. –

ответ

4

Можно выбрать это по значению name поля?

Да, используя либо Array#find (если вы просто хотите, первый) или Array#filter (если вы хотите, чтобы все соответствующие одни).

Array#find (ES2015 +, но может быть подкладки):

var firstMatchingItem = data.menu.find(function(entry) { 
    return entry.name == "Event A"; 
}); 

Array#filter (ES5 +, но может быть подкладки):

var matchingItems = data.menu.filter(function(entry) { 
    return entry.name == "Event A"; 
}); 

Они оба выглядят проще с функциями стрелки ES2015 в:

var firstMatchingItem = data.menu.find(entry => entry.name == "Event A"); 

var matchingItems = data.menu.filter(entry => entry.name == "Event A"); 
2

Вы должны перебирать и найти нужное меню:

for (var i = 0; i < data.menu.length; i++) { 
    if (data.menu[i].name == "Event A") { 
     var menu = data.menu[i]; 
     //do stuff! 
    } 
} 
0

вы можете использовать lodash или аналогичный для этого. Он очень прост в использовании. Использование lodash filter:

_.filter(data, { name: "Event A" }); 

В вашем случае:

$(_.filter(data, { name: "Event A" })[0].sub) 
Смежные вопросы