如何从与某个键匹配的 JSON 对象创建一个数组?

Posted

技术标签:

【中文标题】如何从与某个键匹配的 JSON 对象创建一个数组?【英文标题】:How do I make an array from a JSON object that matches a certain key? 【发布时间】:2021-02-07 01:25:14 【问题描述】:

我正在使用themealdb.com API,它为您提供如下成分:

"strIngredient1": "Quinoa",
"strIngredient2": "Butter",
"strIngredient3": "Red Chilli",
"strIngredient4": "Garlic",
"strIngredient5": "Chicken Breast",
"strIngredient6": "Olive Oil",
"strIngredient7": "Black Olives",
"strIngredient8": "Red Onions",
"strIngredient9": "Feta",
"strIngredient10": "Mint",
"strIngredient11": "Lemon",
"strIngredient12": "",
"strIngredient13": "",
"strIngredient14": "",
"strIngredient15": "",
"strIngredient16": "",
"strIngredient17": "",
"strIngredient18": "",
"strIngredient19": "",
"strIngredient20": "",

我正在从 API 中获取,然后使用 React Hooks 设置具有所有配方属性的对象。对于我想要这样的成分:[Quinoa, Butter, Red Chili ...].

如何遍历 JSON 并找到匹配 "strIngredient" & 而不是空字符串的键,然后将它们添加到数组中?

谢谢!

【问题讨论】:

这能回答你的问题吗? How to get all properties values of a javascript Object (without knowing the keys)? 【参考方案1】:

假设您的数据存储在一个名为 mydata 的变量中,那么您可以这样做:

let newArray = [];

for (const key of Object.keys(mydata)) 
    if (key.includes('strIngredient') && mydata[key] !== "")              
        newArray.push(mydata[key]) 
    

【讨论】:

OP 正在寻找条件附加。首先,键名包含strIngredient,并且值不为空。现在你拥有的相当于Object.values【参考方案2】:
const getIngredients = (strIngredients) => 
    let ingredients = [];

    Object.entries(strIngredients).map(i => 
        const [key, value] = i;

        if (key.includes('strIngredient') && value) 
            ingredients.push(value)
         else return
    )

    return ingredients

【讨论】:

以上是关于如何从与某个键匹配的 JSON 对象创建一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 json 类型的 json 中的任何字段?它应该接受一个对象或一个键数组,如果它存在则更新键,否则创建

如何使用键和值创建json对象,其中value是数组

如何在一个列上进行分组,在另一个列上聚合数组并创建一个由分组列作为键的 JSON 对象

从与数组上的查询条件匹配的第一个元素中投影特定字段

Java实现修改json对象某个键值

如果在 Gatsby 中布尔键匹配 true,则从对象内的对象数组中获取项目 - Graphql