我有这个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()];
我做错了什么以及如何解决?
答案 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()]];
};