无法从undefined中读取属性ScheduleDate

时间:2011-05-25 14:05:33

标签: javascript

 var AppPatientsList = JSON.parse(JSON RESPONSE);   
  var AppPatientsListSort = AppPatientsList.sort(function(a,b){
     return   a.firstName.toLowerCase() <b.firstName.toLowerCase()
            ? -1
            : a.firstName.toLowerCase()>b.firstName.toLowerCase()
            ? 1 : 0;
  });    
    var DataArray = [];
      for (var i = 0; i < AppPatientsListSort.length; ++i) {
        if (AppPatientsListSort[i].firstName === search.value) {
        var appointment = {};
        appointment.PatientID = AppPatientsListSort[i].PatientID;
        appointment.ScheduleDate = AppPatientsListSort[i].ScheduleDate;
        alert(appointment.ScheduleDate); // Works fine, i get the date... 
        }   
        DataArray[i] = appointment;
      } 
      var RowIndex = 0;
      var ScheduleDate = "";
      for (i = 0, len = DataArray.length; i < len; i++) {
        // Throws me error in this place... WHY?
        if (ScheduleDate != DataArray[i].ScheduleDate) {
          ScheduleDate = DataArray[i].ScheduleDate;        
        }      
      }

此代码有什么问题,为什么我无法访问ScheduleDate?

1 个答案:

答案 0 :(得分:1)

当您在appointment子句中时,您只是初始化if变量,但是每次迭代都要将它添加到数组中。

如果AppPatientsListSort的第一个元素没有您搜索的值,DataArray[0]将包含undefined

在第二个循环中,您尝试访问DataArray[0].ScheduleDate,这将引发错误。

<强>更新 更重要的是,由于JavaScript没有块范围,因此DataArray中的多个条目可能指向同一个appointment对象。

根据您的要求,可能需要更改

DataArray[i] = appointment;

DataArray.push(appointment);

并将此语句移到 if子句中,以便只添加符合搜索条件的约会。


进一步说明:要查看DataArray包含的内容,请在第二次循环前制作console.dir(DataArray)并检查内容(假设您使用的是Chrome或Safari,使用Firebug for Firefox)。