JavaScript-For-loop-over-JSON返回';未定义';

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

我有一个简单的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
    //       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]
是一个对象,is
extras[1]
另一个对象?不,因此您不能执行
extras[1]。optionName
,可能工作
extras[1][0]。optionName
在数组中的第二个元素上仍然没有名为
optionName
的属性。该元素是数组(不是对象)。我想你在这段代码之前尝试过合并两个数组,而是添加了第二个数组作为元素。你说的是100%正确的,有没有办法过滤未定义的值并只返回已定义的值?我相信一个
if条件
就可以了!