IT TIP

일치하는 속성에 대한 배열 검색

itqueen 2021. 1. 9. 11:15
반응형

일치하는 속성에 대한 배열 검색


배열이 있고 레스토랑 이름을 반환해야하지만 "food"속성의 값만 알고 있습니다 (색인 번호가 아님).

예를 들어 "chicken"만 알고있는 경우 어떻게 "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를 사용합니다. 다음 솔루션에는 모든 버전의 IE에 존재하지 않는 array.filter ()가 필요합니다.

Shim은 MDN Array.filter 또는 ES5-shim 에서 찾을 수 있습니다.

var result = restaurants.filter(function (chain) {
    return chain.restaurant.food === "chicken";
})[0].restaurant.name;

Array.find기능을 사용할 수도 있습니다 es6. 문서가 여기 있습니다

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 - you can use this javascript lib, DefiantJS (http://defiantjs.com), with which you can filter matches using XPath on JSON structures. To put it in JS code:

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 extends the global object with the method "search" and returns an array with matches (empty array if no matches were found). You can try out the lib and XPath queries using the XPath Evaluator here:

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

ReferenceURL : https://stackoverflow.com/questions/2166765/search-an-array-for-matching-attribute

반응형