如何迭代多个对象?

时间:2015-11-30 13:21:12

标签: javascript

我正在尝试迭代由ajax请求返回的unavailable(s)对象。现在在某些情况下,unavailable属性对象可能只有一个元素或0个元素。我创建了这段代码:

$.each(response.unavailables, function(index, unavailable) 
{
         var notes = unavailable.notes;
         var start = start = unavailable.start_datetime;
         var end = unavailable.end_datetime;
         var data = unavailable;
        //other stuff. ..
});

但我明白了:

  

无法读取未定义的属性长度

这是我的响应变量的结构:

Structure variable

2 个答案:

答案 0 :(得分:2)

您可以使用嵌套循环并检查每个循环中的unavailables数组是否包含数据:

$.each(response, function(index, r)
{

    if (r.unavailables
        && r.unavailables.length){

       $.each(r.unavailables, function(index, unavailable) 
       {
                var notes = unavailable.notes;
                var start = start = unavailable.start_datetime;
                var end = unavailable.end_datetime;
                var data = unavailable;
               //other stuff. ..
       });

    }
});

答案 1 :(得分:1)

你可以在没有任何条件的情况下完成这一操作,只需迭代你的对象即可。 我做了一个plunker示例,我创建了一个类似于你的json文件,有和没有项目进入不可用数组

这是json:

[
        {
            "unavailables":[{"notes":"test1","start_datetime":"30/11/2015"},{"notes":"test2","start_datetime":"01/12/2015"}]
        },
        {
            "unavailables":[{"notes":"test3","start_datetime":"03/12/2015"}]
        },
        {
        "unavailables":[]
        }
] 

我故意留空,最后一个“ unavailablebles array ”。

javascript,我调用json文件。

这里我得到json文件并阅读它。 **我使用两个循环,

  1. 对象数组的外部
  2. 不可用数组的内部。如果它是空的,就没有办法进入不可用循环,所以我们不会得到任何请求未定义变量的错误。

     var xhr = new XMLHttpRequest();
    
      xhr.onload = function() {
          if (xhr.status === 200) {
             console.log('JSON Fired');
              responseObject = JSON.parse(xhr.responseText);
    
              console.log(responseObject);
    
        //here i iterate though the main objects on the outer loop
              responseObject.forEach(function(obj){
        //now i iterate through the unavailables array of each object and get values.
                obj.unavailables.forEach(function(unav,indx,arr){
                  var notes = unav.notes;
                  var start = unav.start_datetime;
                  console.log(notes,start)
                });
    
              });
    
          }
      };
    
      xhr.open('GET', 'myjson.json', true);
      xhr.send(null);
    
  3. 住在plunker:http://plnkr.co/edit/MzpbDa?p=info

    在浏览器的控制台上查看结果。 希望有所帮助,祝你好运。