【问题标题】:How to check for each item of JSON array of objects for a specific value?如何检查 JSON 对象数组的每一项是否具有特定值?
【发布时间】:2019-11-15 03:15:15
【问题描述】:

我正在使用 REACT JS。我的 JSON 对象数组具有以下格式:

{
        "records": {
            "Master Automotives": [
                {
                    "SparePartID": "43",
                    "Name": "Oil and Lubricants",
                    "err": ""
                },
                {
                    "SparePartID": "45",
                    "Name": "Lights",
                    "err": "Stock Error"
                }
            ],
            "Repair Solutions": [
                {
                    "SparePartID": "47",
                    "Name": "Steering Wheel",
                    "err": ""
                }
            ],
            
             "FiveStar Automotives": [
                {
                    "SparePartID": "51",
                    "Name": "Brakes",
                    "err": ""
                },
                {
                    "SparePartID": "53",
                    "Name": "Clutch",
                    "err": "Stock Error"
                },
                  {
                    "SparePartID": "55",
                    "Name": "LED",
                    "err": ""
                }
            ]
        }
    }

现在在一个名为 placeOrder() 的方法中,我想检查以上 JSON 中是否有任何项目具有列“err”值 =“Stock Error”,如果任何一项或多项具有 err 值,我想将 check 的状态设置为 true。

但是所有项目的 err 值都等于 null 即 err="" 那么它应该将 check 的状态设置为 false

我在下面尝试了这段代码,但它不起作用。你能告诉我我做错了什么吗:

placeOrder()
{

const arr = {...this.state.myrecords};

Object.keys(arr).forEach(key => {
   if (arr[key].err === 'Stock Error')
    {
     this.setState({
              check: true
        })
       }
   })
   
}

【问题讨论】:

    标签: arrays json reactjs object foreach


    【解决方案1】:

    看看这个正则表达式解决方案:

    const obj = {
            "records": {
                "Master Automotives": [
                    {
                        "SparePartID": "43",
                        "Name": "Oil and Lubricants",
                        "err": ""
                    },
                    {
                        "SparePartID": "45",
                        "Name": "Lights",
                        "err": "Stock Error"
                    }
                ],
                "Repair Solutions": [
                    {
                        "SparePartID": "47",
                        "Name": "Steering Wheel",
                        "err": ""
                    }
                ],
                
                 "FiveStar Automotives": [
                    {
                        "SparePartID": "51",
                        "Name": "Brakes",
                        "err": ""
                    },
                    {
                        "SparePartID": "53",
                        "Name": "Clutch",
                        "err": "Stock Error"
                    },
                      {
                        "SparePartID": "55",
                        "Name": "LED",
                        "err": ""
                    }
                ]
            }
        };
    
    const objString = JSON.stringify(obj);
    const regPattern = /\bStock Error\b/;
    const result = objString.match(regPattern);
    console.log(result); // This will log the first "stock error" in your object so you know if there is one

    用法:

    If result.length > 0 // 至少存在 1 个库存错误 if result.length === 0 // 不存在库存错误

    【讨论】:

      【解决方案2】:

      如果我理解正确,您落后了一步,即您正在访问arr[key],这只会为您提供内部数组。

      那是

      [
          {
              "SparePartID": "43",
              "Name": "Oil and Lubricants",
              "err": ""
          },
          {
              "SparePartID": "45",
              "Name": "Lights",
              "err": "Stock Error"
          }
      ]`
      

      您需要检查这些数组元素是否有err

      arr[key][0].err === 'Stock Error'

      这将检查第一个索引。 您可以在数组上进一步实现map 函数以检查所有元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        • 2019-03-31
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        相关资源
        最近更新 更多