检查JSON数据中的多个键值对

时间:2018-03-02 00:31:54

标签: javascript json

我有多个产品格式化的JSON数据,每个产品都有多个变体,并且数据显示变量是否可用以及变体的大小。

 "products":[  
    {  
     "variants":[  
        {  
          "available":true,
          "selectedOptions":[  
             {  
                "name":"Size",
                "value":"M"
             }
          ]
        },
        {  
          "available":true,
          "selectedOptions":[  
             {  
                "name":"Size",
                "value":"L"
             }
          ]
        }          
      ]
    },
    {  
     "variants":[
        {  
          "available":true,
          "selectedOptions":[  
             {  
                "name":"Size",
                "value":"S"
             }
          ]
        },     
        {  
          "available":false,
          "selectedOptions":[  
             {  
                "name":"Size",
                "value":"L"
             }
          ]
        }
      ]
    }
 ]

我想遍历JSON数据并判断产品变量的大小是否很大(“value”:“L”)以及产品是否可用(“available”:true)。我可以检查一个或另一个,但我不知道如何同时检查两个。这就是我到目前为止所做的:

o = products;    
function traverse(o) {
  for (var i in o) {
    if(o[i] == true){
      console.log([i,o[i]]);
    }
    if(o[i] == 'L'){
      console.log([i,o[i]]);
    }
    if (o[i] !== null && typeof(o[i])=="object") {
      traverse(o[i]);
    }
  }
}
console.log(o);
traverse(o);  
}

1 个答案:

答案 0 :(得分:1)

您可以使用此方法循环每个产品的可能变体,并根据可用性和大小确定目标。

此方法使用函数findforEach来遍历Object。

函数find会查找大小为selectedOption的{​​{1}}和嵌套L来检查可用性。



forEach

var obj = {  "products": [{      "variants": [{          "available": true,          "selectedOptions": [{            "name": "Size",            "value": "M"          }]        },        {          "available": true,          "selectedOptions": [{            "name": "Size",            "value": "L"          }]        }      ]    },    {      "variants": [{          "available": true,          "selectedOptions": [{            "name": "Size",            "value": "S"          }]        },        {          "available": false,          "selectedOptions": [{            "name": "Size",            "value": "L"          }]        }      ]    }  ]};

obj.products.forEach((p, i) => {
  p.variants.forEach((v) => {
    if (v.available) {
      var found = v.selectedOptions.find((s) => s.value === 'L');
      if (found) {
        console.log(`Found a product at index '${i}' with variant ['${v.available}' | '${found.value}']`);
      }
    }
  });
});