Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历JSON数组中以特定键名开头的键_Javascript_Jquery_Json - Fatal编程技术网

Javascript 循环遍历JSON数组中以特定键名开头的键

Javascript 循环遍历JSON数组中以特定键名开头的键,javascript,jquery,json,Javascript,Jquery,Json,有没有一种有效的方法可以循环遍历以键名“option”开头的JSON数组中的键,然后循环遍历所有键或设置最大值 我目前正在做以下工作: $.each(shopifyProductJSON.variants, function(index, variant) { variantOptions = new Array(); variantOptions.push(variant.option1); variantOptions.push(variant.option2);

有没有一种有效的方法可以循环遍历以键名“option”开头的JSON数组中的键,然后循环遍历所有键或设置最大值

我目前正在做以下工作:

$.each(shopifyProductJSON.variants, function(index, variant) {
    variantOptions = new Array();
    variantOptions.push(variant.option1);
    variantOptions.push(variant.option2);
    variantOptions.push(variant.option3);
});
这很好,但希望它更加动态,以防将来添加更多选项

每个
变量的JSON数组的一部分示例:

inventory_management: null
inventory_policy: "deny"
inventory_quantity: 0
old_inventory_quantity: 0
option1: "Bronze"
option2: "Satin Gold"
option3: "600mm"
position: 1
price: "550.00"
我以为这会有用的

variantOptions = new Array();
for (i = 1; i < 4; i++) {
    var key = 'option' + i;
    variantOptions.push(key);
}
variantOptions=新数组();
对于(i=1;i<4;i++){
变量键='选项'+i;
差异。按(键);
}

要解决眼前的问题,您需要访问循环中的对象属性,而不是将字符串推入数组:

let variantOptions = [];
for (i = 1; i < 4; i++) {
  var key = 'option' + i;
  if (data.hasOwnProperty(key)) {
    variantOptions.push(data[key]);
  }
}
然后,访问选项的JS将成为一个简单的属性访问器:

让variantOptions=data.options;

同意。在restAPI的API中,它们作为选项1、选项2键返回。。。这太愚蠢了。在JSAPI中,它们以数组的形式返回,但是对于速率限制,我使用restAPI转储JSON,所以我只能使用它。
{
  inventory_management: null
  inventory_policy: "deny"
  inventory_quantity: 0
  old_inventory_quantity: 0
  options: ['Bronze', 'Satin Gold', '600mm'],
  position: 1
  price: "550.00"
}