2015-03-24 3 views
1

У меня есть этот JSON объект:Получение массива из объекта JSON

var Events = { 
"Jan" : [], 
"Feb" : [], 
"Mar" : { 
    "23" : [ 
     {"eventName" : "Start", "eventYear" : 2015, "eventDescription" : "First event description"}, 
     {"eventName" : "Start 2", "eventYear" : 2016, "eventDescription" : "Second event description"}, 
     {"eventName" : "Start 3", "eventYear" : 2017, "eventDescription" : "Third event description"} 
    ], 
    "24" : [ 
     {"eventName" : "Start", "eventYear" : 2015, "eventDescription" : "First event description for 24"}, 
     {"eventName" : "Start 2", "eventYear" : 2016, "eventDescription" : "Second event description for 24"} 
    ] 
}, 
"Apr" : [], 
"May" : [], 
"Jun" : [], 
"Jul" : [], 
"Aug" : [], 
"Sep" : [], 
"Oct" : [], 
"Nov" : [], 
"Dec" : [] 
} 

Я пытаюсь получить массив событий за текущий месяц:

window.addEventListener('DOMContentLoaded', init); 
var date, month_names_short, thisMonthEvents; 
function init(){ 
    date = new Date(); 
    month_names_short = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
    thisMonthEvents = Events.month_names_short[date.getMonth()]; 
}; 

Но я получаю эту ошибку TypeError: Cannot read property '2' of undefined для этого line:

thisMonthEvents = Events.month_names_short[date.getMonth()]; 

Что я делаю неправильно и как его можно исправить?

+1

Вы имеете в виду 'thisMonthEvents = Events [month_names_short [date.getMonth()]]'? – nnnnnn

+0

Вы пытались использовать 'getJSONArray()' и 'setJSONArray()'? – Vikrant

+0

'month_names_short' не является собственностью События – Feek

ответ

0

Во-первых, вам нужно найти название месяца в month_names_short массива по индексу. Затем с помощью bracket notation и нашли имя, которое вы можете получить доступ соответствующего события:

function init() { 
    date = new Date(); 
    month_names_short = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
    thisMonthEvents = Events[month_names_short[date.getMonth()]]; 
}; 
0

Если вы планируете использовать массив month_names_short, вы можете сделать что-то вроде этого:

function init(){ 
    date = new Date(); 
    month_names_short = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
    for (var index in month_names_short) { 
     var month = month_names_short[index]; 
     thisMonthEvents = Events[month]; 
    } 
}; 
0

Использование "[]" вместо "." donation.

window.addEventListener('DOMContentLoaded', init); 
var date, month_names_short, thisMonthEvents; 
function init(){ 
    date = new Date(); 
    month_names_short = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
    thisMonthEvents = Events[month_names_short[date.getMonth()]]; 
}; 
Смежные вопросы