在 JSON 中搜索一组键值对

Search Set Of Key Value Pairs in JSON

我在 JSON 对象中列出了所有可能的独特产品变体组合 [这就是 woocommerce 构建它的方式]。举例来说,我有一种产品有 2 种尺寸 - size1 和 size2 以及颜色 - color1 和 color2:

variant_list = [
       {
          "variation_id":328,
          "attributes":{
             "size":"size1",
             "color":"color1"
          }
       },
       {
          "variation_id":329,
          "attributes":{
             "size":"size2",
             "color":"color1"
          }
       },
       {
          "variation_id":330,
          "attributes":{
             "size":"size1",
             "color":"color2"
          }
       },
       {
          "variation_id":331,
          "attributes":{
             "size":"size2",
             "color":"color2"
          }
       ]

如果用户选择了特定的尺寸和颜色组合(使用单选按钮),例如选择了尺寸 2 和颜色 1,我需要将变体 ID:329 传递到我的后端。使用属性条件集 = {"size":"size2","color":"color1"}.

搜索我的 JSON 的最佳方法是什么

我的 variant_list 对象已给出 - 我无法更改它,但可以根据需要构建我的标准对象,以使此搜索简单高效。

我尝试过的方法也有效,但我知道这是老派且效率低下:-( http://jsfiddle.net/v18h6qta/6/

您可以使用 underscore js library functions find,findWhere 或任何其他适合您的方式来查找该字段。

例如

你可以使用类似的东西(我正在使用 javascript)

result = _U.findWhere(variant_list,{size:'user value',color:'user value'});
console.log(result.variation_id);

希望对您有所帮助。

我在你的 fiddle 中进行了简单的更新 我已经添加了这段代码

function find(){
    var a=$("input[name=size]:checked").val();
    var b=$("input[name=color]:checked").val();

     for(var i=0;i< variant_list.length; i++){
         if(variant_list[i].attributes.size==a &&variant_list[i].attributes.color==b ){
           alert(variant_list[i].variation_id);   
         }
    }  

}

Click the demo