未捕获的TypeError:无法读取属性' start'未定义的

时间:2015-08-08 18:09:39

标签: javascript jquery

我有一个像这样的列表,其中包含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循环中未定义

2 个答案:

答案 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来检查您是否在最后一项上来避免这种情况。

反正。我正在阅读你的代码,我个人认为你需要重新思考并重新编写你想要实现的目标。它没有多大意义,并且有很多冗余。