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?
答案 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)。