使用Express 4作为我的服务器引擎。当我运行以下功能时,窗口变得没有响应。控制台没有错误。
function updateLoadedData(type, schedule, date) {
var dateYear = date.year()
var dateMonth = date.month()
var dateDate = date.date()
if (dateData[dateYear] == undefined)
dateData[dateYear] = new Array()
if (dateData[dateYear][dateMonth] == undefined)
dateData[dateYear][dateMonth] = new Array()
if (dateData[dateYear][dateMonth][dateDate] == undefined)
dateData[dateYear][dateMonth][dateDate] = new Array()
var output = ["hello", "stackoverflow"]
dateData[dateYear][dateMonth][dateDate] = output
}
我不知道试图找出造成这个错误的原因。任何帮助赞赏。提前谢谢。
答案 0 :(得分:1)
问题必定在其他地方。考虑一下代码的实现。没有错误。
你确实有很多被忽略的{}和;因此,如果您处于严格模式,这也可能是一个问题。
var dateData = {};
var update = function updateLoadedData(type, schedule, date) {
var dateYear = date.year()
var dateMonth = date.month()
var dateDate = date.date()
if (dateData[dateYear] == undefined)
dateData[dateYear] = new Array()
if (dateData[dateYear][dateMonth] == undefined)
dateData[dateYear][dateMonth] = new Array()
if (dateData[dateYear][dateMonth][dateDate] == undefined)
dateData[dateYear][dateMonth][dateDate] = new Array()
var output = ["hello", "stackoverflow"]
dateData[dateYear][dateMonth][dateDate] = output
};
update(null,null, {
'year' : function(){ return 2017;},
'month' : function(){ return 3;},
'date' : function(){ return 2;},
});
alert(JSON.stringify(dateData));

另请注意,如果dateData
也是数组而不是对象,则该数组的第一个2016键将为null。因此,如果你循环使用它,如果你的循环没有处理空条目,你可能会遇到长时间运行的脚本问题。
这就是为什么你应该.push()
到数组而不是设置精确的索引,谁将导致'漏洞'在数组中。所以我有一个预感,你最好使用嵌套对象而不是3d数组。
答案 1 :(得分:0)
在我看来,它与你的上一句话有关:
dateData[dateYear][dateMonth][dateDate] = output
您正在将二维数组扩展为三维数据。
我调试它的方法是注释掉该行,看看窗口是否保持响应。这将告诉你这条线是否是罪魁祸首。如果是,则可以添加console.log以查看dateDate
值是什么。也许这是假的。
此外,您可能想要研究多维数组。 This link是一个很好的起点。
正如其他人所指出的,考虑一种不同的方式来表示您的数据。多维数组(尤其是2以上)通常以不同的形式表示。