我有一个像这样的列表,其中包含1000多个条目。
[
{
"start": "Sun May 24 2015 01:00:00 GMT+0530 (IST)",
"end": "Sun May 24 2015 01:30:00 GMT+0530 (IST)",
"title": "Event 1"
},
{
"start": "Sun May 24 2015 04:00:00 GMT+0530 (IST)",
"end": "Sun May 24 2015 06:00:00 GMT+0530 (IST)",
"title": "Event 2"
}
]
我正在写一个像这样的函数: -
function finalIndex(ind)
{
var final_ind = ind+1;
var chkdate = new Date(list[ind].start);
var day = chkdate.getDate();
//alert(day);
var chkdate1 = new Date(list[final_ind].start);
var day1 = chkdate.getDate();
//alert(day1);
final_ind = final_ind+1;
while(day == day1)
{
chkdate1 = new Date(list[final_ind].start);
day1 = chkdate.getDate();
final_ind = final_ind+1;
}
final_ind = final_ind-1;
return final_ind;
}
在此函数中 ind 是给定日期的起始索引,在此函数的帮助下,我想找出与给定日期关联的最终对象的索引。
外面的评论警报工作正常并显示24,24作为输出。
但我得到未捕获的TypeError:无法读取属性' start'虽然它能够读取列表[final_ind] .start befor循环,但是在while循环中未定义。
答案 0 :(得分:0)
只需改变:
while(day == day1)
为:
while(day == day1 && list[final_ind])
或:
while(day == day1 && list.length > final_ind)
<强>解释强>:
最后一个循环超出界限,添加此项确定对象存在。
答案 1 :(得分:0)
当你的函数在最后一个索引上运行时,你的final_ind = ind+1
会分配一个不存在的索引,当它到达chkdate1=new Date(list[final_ind].start)
时,它会抛出一个错误,因为该项不存在。通过将此行添加为您的第一个函数if(ind >= list.length-1) return
来检查您是否在最后一项上来避免这种情况。
反正。我正在阅读你的代码,我个人认为你需要重新思考并重新编写你想要实现的目标。它没有多大意义,并且有很多冗余。