【问题标题】:Getting object data with key value in JavaScript在 JavaScript 中获取具有键值的对象数据
【发布时间】:2021-12-28 14:28:09
【问题描述】:

我有一个这样的对象:

{
  "idMeal": "52795",
  "strMeal": "Chicken Handi",
  "strDrinkAlternate": null,
  "strCategory": "Chicken",
  "strArea": "Indian"
}

我正在尝试使用“idMeal”的值来获取其他项目(即 strMeal 和 strCategory)的值。我该怎么做?

【问题讨论】:

  • 根据接受的答案,问题实际上是关于一个对象数组,如所示,以及如何找到这些数组中满足某些条件的元素,即 filter()。

标签: javascript json mapping filtering


【解决方案1】:

据我了解,您想要过滤食物对象列表,只需将它们放在数组中并像这样过滤:

[obj1, obj2, obj3].filter(o => o.idMeal="52795")

【讨论】:

    【解决方案2】:

    首先,您应该说明您的尝试。然后,您可以使用一个简单的条件:

    let cat;
    let area;
    if (obj.idMeal === myValue) {
        cat = obj.strCategory;
        area = obj.strArea;
    }
    

    有更多方法可以做到这一点。看看.map().filter(),但这些都是针对数组的。

    【讨论】:

      【解决方案3】:

      实现这一点最简单的方法是根据键值对过滤数据,然后将请求的字段缩减为一个新对象。

      const mealData = [{
        "idMeal": "52795",
        "strMeal": "Chicken Handi",
        "strDrinkAlternate": null,
        "strCategory": "Chicken",
        "strArea": "Indian",
      }];
      
      const filterAndMap = (data, key, value, fields) =>
        data
          .filter((record) => record[key] === value)
          .map(record => fields.reduce((acc, field) =>
            ({ ...acc, [field]: record[field] }), {}));
      
      const result = filterAndMap(mealData, 'idMeal', '52795', ['strMeal', 'strCategory']);
      
      console.log(result);

      或者,您可以传递一个过滤器函数和一个映射器函数:

      const mealData = [{
        "idMeal": "52795",
        "strMeal": "Chicken Handi",
        "strDrinkAlternate": null,
        "strCategory": "Chicken",
        "strArea": "Indian",
      }];
      
      const filterAndMap = (data, filterFn, mapperFn) =>
        data.filter(filterFn).map(mapperFn);
      
      const result = filterAndMap(
        mealData,
        ({ idMeal }) => idMeal === '52795',
        ({ strMeal, strCategory }) => ({ strMeal, strCategory }));
      
      console.log(result);

      在上面的例子中,我们可以去掉filterAndMap函数,直接链接filtermap

      const mealData = [{
        "idMeal": "52795",
        "strMeal": "Chicken Handi",
        "strDrinkAlternate": null,
        "strCategory": "Chicken",
        "strArea": "Indian",
      }];
      
      const result = mealData
        .filter(({ idMeal }) => idMeal === '52795')
        .map(({ strMeal, strCategory }) => ({ strMeal, strCategory }));
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2016-06-28
        • 1970-01-01
        • 2021-12-30
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 2020-09-11
        相关资源
        最近更新 更多