我有一个数组,我需要返回一个餐馆的名字,但我只知道它的“食物”属性的值(不是它的索引号)。
例如,如果我只知道“鸡肉”,我怎么能归还“肯德基”?
restaurants =
[
{"restaurant" : { "name" : "McDonald's", "food" : "burger" }},
{"restaurant" : { "name" : "KFC", "food" : "chicken" }},
{"restaurant" : { "name" : "Pizza Hut", "food" : "pizza" }}
];
答案 0 :(得分:66)
for(var i = 0; i < restaurants.length; i++)
{
if(restaurants[i].restaurant.food == 'chicken')
{
return restaurants[i].restaurant.name;
}
}
答案 1 :(得分:44)
在这种情况下,我会使用ECMAscript 5 Array.filter。以下解决方案需要在所有IE版本中都不存在的array.filter()。
可以在此处找到垫片:MDN Array.filter或ES5-shim
var result = restaurants.filter(function (chain) {
return chain.restaurant.food === "chicken";
})[0].restaurant.name;
答案 2 :(得分:34)
您还可以使用Array.find
的{{1}}功能。该文档是here
es6
答案 3 :(得分:7)
for (x in restaurants) {
if (restaurants[x].restaurant.food == 'chicken') {
return restaurants[x].restaurant.name;
}
}
答案 4 :(得分:1)
现在一定为时已晚,但正确的版本是:
for(var i = 0; i < restaurants.restaurant.length; i++)
{
if(restaurants.restaurant[i].food == 'chicken')
{
return restaurants.restaurant[i].name;
}
}
答案 5 :(得分:1)
你可以使用ES5。它首先使用回调
function findRestaurent(foodType) {
var restaurant;
restaurants.some(function (r) {
if (r.food === id) {
restaurant = r;
return true;
}
});
return restaurant;
}
答案 6 :(得分:1)
@Chap - 你可以使用这个javascript lib,DefiantJS(http://defiantjs.com),你可以使用它在JSON结构上使用XPath过滤匹配。把它放在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使用方法&#34; search&#34;扩展全局对象。并返回一个匹配的数组(如果没有找到匹配则为空数组)。您可以在此处使用XPath Evaluator尝试lib和XPath查询:
答案 7 :(得分:0)
let restaurant = restaurants.find(element => element.restaurant.food == "chicken");
find()方法返回元素中第一个元素的值 提供的数组满足提供的测试功能。
在: https://developer.mozilla.org/pt-PT/docs/Web/JavaScript/Reference/Global_Objects/Array/find