从JSON对象获取数组

时间:2015-03-24 06:50:17

标签: javascript 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

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

我做错了什么以及如何解决?

3 个答案:

答案 0 :(得分:0)

如果您打算使用月份名称短数组,则可以执行以下操作:

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];
    }
};

答案 1 :(得分: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()]];
};

答案 2 :(得分: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()]];
};