在数组中搜索匹配的属性

时间:2010-01-30 03:57:31

标签: javascript

我有一个数组,我需要返回一个餐馆的名字,但我只知道它的“食物”属性的值(不是它的索引号)。

例如,如果我只知道“鸡肉”,我怎么能归还“肯德基”?

restaurants = 
  [
    {"restaurant" : { "name" : "McDonald's", "food" : "burger" }},
    {"restaurant" : { "name" : "KFC",        "food" : "chicken" }},
    {"restaurant" : { "name" : "Pizza Hut",  "food" : "pizza" }}
  ];

8 个答案:

答案 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.filterES5-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查询:

http://www.defiantjs.com/#xpath_evaluator

答案 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