2016-05-28 5 views
2

У меня проблемы с этой проблемой часами назад. Я написал их в своей функции JQuery, чтобы проверить значение в переменной, если оно существует или нет.Uncaught TypeError: Невозможно прочитать свойство «xxxx» неопределенного, но определено

console.log("in tr"); 
console.log(tmpRoomlistArray[c].room_name); 
let roomName = tmpRoomlistArray[c].room_name; 

Когда я побежал и посмотрел на Google Chrome Console. Он показывает результаты следующим образом.

Rome <<< In console.log It shows valid value         
in tr              
Uncaught TypeError: Cannot read property 'room_name' of undefined << 
This is what happen when I assign in to a variable and this is what I need 

Что происходит? Прямо сейчас я слеп ..

редактировать: содержание вопроса редактировать

ответ

0

tmpRoomlistArray [с] приходит как неопределенные.

Try для печати:

console.log(tmpRoomlistArray[c]); 

или

console.log(tmpRoomlistArray); 

вместо

console.log(tmpRoomlistArray[c].room_name); 

Вы также можете использовать

debugger 

в javascript код для просмотра значения массива.

+0

О да, но если я хочу назначить его переменной, это показало бы «Uncaught TypeError:». Мне очень жаль, что у меня возникли вопросы и язык. Я чувствую себя не очень хорошо, я кодировал много часов. –

0

Использовать var вместо let?

Возможно ли найти что-то более строго типизированное?

+0

Я изменил его. Но я не работаю TvT –

+0

Насколько велик весь сценарий? Любой способ, которым вы могли бы разместить его где-нибудь, или даже лучше отвести проблему до минимального тестового примера и опубликовать это. – Dave

+0

Имеет 255 строк. Я поставил все мой код в этом https://jsfiddle.net/vf6rL66o/ Это довольно сумбурно, потому что я очень новое по программированию. –

1

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

Я просто положить

tmpRoomlistArray[c-1] 

в моей функции, и она работала. Я думаю, что решение просто отдыхает больше, поэтому вы могли видеть проблему более четко.

Для тех, кто хочет знать, что происходит, просто прочитайте его ниже.

У меня есть функция, которая вставляет строку в таблицу, и эта функция имеет 2 параметра, которые представляют собой массив. Таким образом, эта функция будет последовательно вставлять строку в таблицу. Он не остановится, пока не достигнет конца массива.

var day = ["1","2","3"]; 
var room = ["room1","room2","room3",....,"room16"] // 16 Elements; 
var timeForHeader = ["08:00","09:00",....."20:00"] // 25 Elements; 

function addRow(paramDay,paramRoom){ 
// this function will create many rows depends on paramRoom length and columns depends on length of time header. 
    var dayLength = day.length; 
    var roomLength = room.length; 
    var timeForHeaderLength = timeForHeader.length; 
    for(var i = 0; i < dayLength; i++) 
    { 
     // this is for rows 
     for(var c = 0; c < timeForHeaderLength+1; c++) 
     { 
      // I made c +1 timeForHeaderLength because I want a header 
      //this is for column 
      if(c == 0) 
      { 
      // if c == 0 mean I will insert a header row element in my table 
      var tr = $("<tr/>"); 
      var td = $("<td/>",{text:timeForHeader[0]+" - "+timeForHeader[1]}).appendTo(tr); 
      ... 
      ... 
      var td23 = $("<td/>",{text:timeForHeader[23]+" - "+timeForHeader[24]}).appendTo(tr); 
      $("#mytableId").append(tr); 
      }else{ 
      // this row that contain room's name and content 
      // and this is the part that cause me a problem. 
      // in this else condition c must be 1-17 so when I access to tmpRoomlistArray that contains 16 Element 
      // So right now You guys should know right. The tmpRoomlistArray's index must be 0 - 16 


      // it worked when c is between 1 - 16, But it didn't work on the last c cause c is equal to 17 
      console.log(tmpRoomlistArray[c].room_name); 
      let roomName = tmpRoomlistArray[c].room_name; 
      //It should be 
      let roomName = tmpRoomlistArray[c-1].room_name; 
      // Hahahahahahahahahahahahahahahahahhaha 
      }    
     } 

    } 
} 
Смежные вопросы