Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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的for循环中为json返回生成动态变量?_Javascript_Jquery_Api_For Loop_Dynamic Variables - Fatal编程技术网

如何在javascript的for循环中为json返回生成动态变量?

如何在javascript的for循环中为json返回生成动态变量?,javascript,jquery,api,for-loop,dynamic-variables,Javascript,Jquery,Api,For Loop,Dynamic Variables,我调用的API包含一部分我需要提取的成分,然后推送到html页面。它们被列为strIngredient1、strIngredient2、strIngredient3。。。到15岁。我想做的是循环每种成分?我想我需要某种动态变量。完全不确定 for(变量x=1;xkey.startsWith('strIngredient'); 对于(const i=0;我必须理解逻辑:drinkResponse.drinks是一个饮料列表,每个饮料都有固定数量的成分StringCredit,但是这些成分在对象本

我调用的API包含一部分我需要提取的成分,然后推送到html页面。它们被列为strIngredient1、strIngredient2、strIngredient3。。。到15岁。我想做的是循环每种成分?我想我需要某种动态变量。完全不确定

for(变量x=1;x<16;x++){
if((drinkResponse.drinks[0].StringCredit+x)!==null){
$(“#drinkOutput”).append($(“

饮料成分”+x+”:“+(drinkResponse.drinks[0].StringCredit+x)+“

”) } }

您正试图将值
x
附加到变量名。很接近,但需要使用括号符号而不是点符号

例如,如果
x
当前为5,则可以使用
drinkResponse.drinks[0]['stringresponent'+x]
drinkResponse.drinks[0]['stringresponent${x}`]
获取
stringresponse.drinks的值

正如莱恩指出的,您还可以使用
Object.keys
枚举对象上的所有键,然后仅筛选以
stringredent
开头的键:

// get all keys on the drink
const allKeys = Object.keys(drinkResponse.drinks[0]);

// now filter for only keys starting with `strIngredient`
const ingredients = allKeys.filter(key => key.startsWith('strIngredient'));

for (const i=0; i<ingredients.length; i++) {
    $("#drinkOutput").append($("<p class='drinkData'>Drink Ingredient" 
    + i + " : " + (drinkResponse.drinks[0][ingredients[i]]) + "</p>"))
}
//获取饮料上的所有钥匙
const allKeys=Object.keys(drinkResponse.drinds[0]);
//现在只筛选以“StringCredit”开头的键`
const components=allKeys.filter(key=>key.startsWith('strIngredient');

对于(const i=0;i您正试图使用
x
的值附加到变量名中。这很接近,但您需要使用括号表示法而不是点表示法

例如,如果
x
当前为5,则可以使用
drinkResponse.drinks[0]['stringresponent'+x]
drinkResponse.drinks[0]['stringresponent${x}`]
获取
stringresponse.drinks的值

正如莱恩指出的,您还可以使用
Object.keys
枚举对象上的所有键,然后仅筛选以
stringredent
开头的键:

// get all keys on the drink
const allKeys = Object.keys(drinkResponse.drinks[0]);

// now filter for only keys starting with `strIngredient`
const ingredients = allKeys.filter(key => key.startsWith('strIngredient'));

for (const i=0; i<ingredients.length; i++) {
    $("#drinkOutput").append($("<p class='drinkData'>Drink Ingredient" 
    + i + " : " + (drinkResponse.drinks[0][ingredients[i]]) + "</p>"))
}
//获取饮料上的所有钥匙
const allKeys=Object.keys(drinkResponse.drinds[0]);
//现在只筛选以“StringCredit”开头的键`
const components=allKeys.filter(key=>key.startsWith('strIngredient');

对于(const i=0;我必须理解逻辑:
drinkResponse.drinks
是一个饮料列表,每个饮料都有固定数量的成分
StringCredit
,但是这些成分在对象本身中还没有作为一个列表属性提供?您介意提供一个示例对象吗?我已经添加了JSON返回到原始问题。谢谢。如果您可以/有权访问它,您应该尝试打开这些数字列表(strMeasure14,strIngredient15)进入数组。否则结构有点有限/有缺陷。这也会使访问它变得更简单。只是为了理解逻辑:
drinkResponse.drinks
是一个饮料列表,每个饮料都有固定数量的成分
stringredent
,但是在对象本身中,这些成分并不是作为列表提供的,而是作为字符串属性提供的?W您介意提供一个示例对象吗?我已将JSON返回添加到原始问题中。谢谢。如果您可以/有权访问它,您应该尝试转换这些数字列表(strMeasure14,strIngredient15)进入数组。否则结构有点有限/有缺陷。这也会使访问它更简单。如果是这样,他也应该循环所有键,以
StringCredit
开头,而不是从1到15有一个固定的循环。@gcochard我试过了,现在我的回答是undefined of undefined of undefined如果他应该这样做的话还可以循环使用以
StringCredit
开头的所有键,而不是从1到15的固定循环。@gcochard我尝试过,现在我的响应是未定义的或未定义的