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

问题描述 投票:0回答:1

我有多个产品格式化的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);  
}
javascript json
1个回答
1
投票

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

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

函数find寻找一个大小为selectedOptionL和嵌套的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}']`);
      }
    }
  });
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
© www.soinside.com 2019 - 2024. All rights reserved.