Ответ 1
for(var i = 0; i < restaurants.length; i++)
{
if(restaurants[i].restaurant.food == 'chicken')
{
return restaurants[i].restaurant.name;
}
}
У меня есть массив, мне нужно вернуть название ресторана, но я знаю только его атрибут "food" (а не индекс).
Например, как я мог вернуть "KFC", если бы знал только "курицу"?
restaurants =
[
{"restaurant" : { "name" : "McDonald's", "food" : "burger" }},
{"restaurant" : { "name" : "KFC", "food" : "chicken" }},
{"restaurant" : { "name" : "Pizza Hut", "food" : "pizza" }}
];
for(var i = 0; i < restaurants.length; i++)
{
if(restaurants[i].restaurant.food == 'chicken')
{
return restaurants[i].restaurant.name;
}
}
В этом случае я бы использовал файл ECMAscript 5 Array.filter. Для следующего решения требуется array.filter(), который не существует во всех версиях IE.
Прокладки можно найти здесь: MDN Array.filter или ES5-shim
var result = restaurants.filter(function (chain) {
return chain.restaurant.food === "chicken";
})[0].restaurant.name;
вы также можете использовать Array.find
функцию es6
. doc здесь
return restaurants.find(item => {
return item.restaurant.food == 'chicken'
})
for (x in restaurants) {
if (restaurants[x].restaurant.food == 'chicken') {
return restaurants[x].restaurant.name;
}
}
Должно быть слишком поздно, но правильная версия:
for(var i = 0; i < restaurants.restaurant.length; i++)
{
if(restaurants.restaurant[i].food == 'chicken')
{
return restaurants.restaurant[i].name;
}
}
вы можете использовать ES5. Его довольно сначала, используя обратный вызов
function findRestaurent(foodType) {
var restaurant;
restaurants.some(function (r) {
if (r.food === id) {
restaurant = r;
return true;
}
});
return restaurant;
}
@Chap - вы можете использовать эту javascript lib, DefiantJS (http://defiantjs.com), с помощью которой вы можете фильтровать совпадения с помощью XPath на структурах JSON, Чтобы поместить его в код JS:
var data = [
{ "restaurant": { "name": "McDonald's", "food": "burger" } },
{ "restaurant": { "name": "KFC", "food": "chicken" } },
{ "restaurant": { "name": "Pizza Hut", "food": "pizza" } }
].
res = JSON.search( data, '//*[food="pizza"]' );
console.log( res[0].name );
// Pizza Hut
DefiantJS расширяет глобальный объект методом "поиск" и возвращает массив со спичками (пустой массив, если совпадений не найдено). Вы можете опробовать запросы lib и XPath с помощью XPath Evaluator: