JavaScript-For-loop-over-JSON返回';未定义';
我有一个简单的for循环,返回JavaScript-For-loop-over-JSON返回';未定义';,javascript,json,Javascript,Json,我有一个简单的for循环,返回undefined 代码如下: var optionName = ''; for(var i=0; i<extras.length; i++){ optionName = extras[i].optionName; } console.log(optionName); // console.log(extras[0].optionName); >> Drinks
undefined
代码如下:
var optionName = '';
for(var i=0; i<extras.length; i++){
optionName = extras[i].optionName;
}
console.log(optionName);
// console.log(extras[0].optionName); >> Drinks
// console.log(extras[1].optionName); >> Undefined
var optionName='';
对于(变量i=0;i>饮料
//console.log(附加[1].optionName);>>未定义
以下是附加组件
阵列:
数组中的第二项是数组(数组[3]),而不是对象。
optionName
在该项上未定义。第一个数组元素具有optionName属性,但第二个元素没有。因此,当您访问附加[1]时.optionName
不存在,代码返回未定义。因此,您有一个包含2个元素的数组
extras = [
{key: value},
[object0, object1, object2],
]
正如您所看到的,extras数组中的第一个元素是一个对象,该对象具有键:optionName
和值:Drinks
。因此,当您调用
console.log(extras[0].optionName);
它将返回饮料的价值
然后循环移动到数组中的下一个元素,并查找键:optionName
,但是由于第二个数组元素是数组,它找不到键并返回未定义的。因为我不知道extra[1]的对象中包含什么
我无法提供如何重写循环的建议,但上面解释了为什么会收到未定义的
只需添加if
条件即可过滤未定义的值:
if (extras[0].optionName) {
console.log(extras[0].optionName);
}
由于undefined在JS中是一个falsy
值,因此任何时候如果实际上没有值,它都不会移动到if
语句中
当然,如果您想让它在循环中工作,请将[0]
替换为[i]
您可以共享您的附加对象吗?@AlaEddineJEBALI这是图片中的对象,数组[2]是的,我明白了,但为了能够与您一起检查问题,我们需要查看JSON响应中返回的额外对象。请不要发布图像,发布文本。图像中有答案。请检查更新的代码(最后2行)。我仍然不知道解决方案!拜托!伙计!extras[0]
是一个对象,isextras[1]
另一个对象?不,因此您不能执行extras[1]。optionName
,可能工作extras[1][0]。optionName
在数组中的第二个元素上仍然没有名为optionName
的属性。该元素是数组(不是对象)。我想你在这段代码之前尝试过合并两个数组,而是添加了第二个数组作为元素。你说的是100%正确的,有没有办法过滤未定义的值并只返回已定义的值?我相信一个if条件
就可以了!