在 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);
}
}
}
我在 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);
}
}
}