首页 > 解决方案 > 如何检查 JSON 对象数组的每一项是否具有特定值?

问题描述

我正在使用 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值,我想将检查状态设置为真的。

但是所有项目的 err 值都等于 null 即err=""那么它应该 setState of checkfalse

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

placeOrder()
{

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

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

标签: arraysjsonreactjsobjectforeach

解决方案


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

那是

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

您需要检查这些数组元素的err.

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

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


推荐阅读