2015-08-08 3 views
0

У меня есть список вроде этого, который содержит более 1000 записей.Uncaught TypeError: Не удается прочитать свойство 'start' of undefined

[ 
    { 
     "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" 
    } 
] 

и i'am написание функции, как это: -

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 цикла.

+0

'final_ind = final_ind + 1;' приведет к тому, что 'final_ind' внутри цикла while будет отличаться от' final_ind' вне цикла while. Это может привести к тому, что поиск массива не будет неопределенным. – heartyporridge

+0

не получил тебя ... ??? и я получаю ошибку в chkdate1 = новая дата (list [final_ind] .start); внутри цикл. – btechhb

+0

'final_ind = final_ind + 1;' ' в то время (день == day1)' ' {chkdate1 = новый Дата (список [final_ind] .start);' – heartyporridge

ответ

0

Просто изменение от:

while(day == day1) 

к:

while(day == day1 && list[final_ind]) 

или:

while(day == day1 && list.length > final_ind) 

Объяснение:

Последние Лоо p выходит за пределы, добавляя это, вы уверены, что объект существует.

+0

теперь ошибка но теперь цикл while продолжается до конца, хотя у меня всего 10 записей с датой = 24; – btechhb

+1

, чтобы получить желаемый результат, измените строку внутри цикла 'day1 = chkdate.getDate();' to 'day1 = chkdate1.getDate();'. –

+0

HeartBeat прав, я не видел этого при первом взгляде. –

0

Когда ваша функция работает по последнему индексу, ваш final_ind = ind+1 присваивает несуществующий индекс, а когда он достигает chkdate1=new Date(list[final_ind].start), он выдает ошибку, потому что этот элемент не существует. Избегайте этого, проверяя, что вы находитесь на последнем элементе, добавив эту строку в качестве первой из вашей функции: if(ind >= list.length-1) return.


В любом случае. Я читал ваш код и лично считаю, что вам нужно переосмыслить и переписать то, что вы пытаетесь достичь. Это не имеет большого смысла, и есть много избыточности.

+0

Ну вы можете предложить лучшие способы сделать это. это будет большой помощью для начинающих, таких как я. – btechhb

+0

Я знаю своего друга. Я хотел ответить на этот вопрос, но нашел слишком много. У меня не было времени предложить это, но подумать об этом. Надеюсь, кто-то может вам помочь. Прямо сейчас я в спешке :(Извините. – lu1s