我正在尝试遍历两个日期数组dateFrom
和dateTo
以在甘特图插件中使用。甘特图需要ganttData
。我想同时遍历这两个数组并创建ganttData
作为数组数组。现在,它同时在两个数组中循环,但ganttData
只是两个数组的最后一个索引,这是有道理的,因为我只是每次通过循环重新分配值。
我尝试使用+=
代替=
,但收到错误:
未捕获的TypeError:无法读取未定义的属性“长度”
以下是我到目前为止的代码:
我检查过这些数组是正确的。
我对JS不熟悉,所以非常感谢任何和所有的帮助。谢谢!
var datesFrom = <%= dates_from %>
var datesTo = <%= dates_to %>
//var ganttData = [] if I were to use ganttData += [ below
output = []
i;
for (i = 0; i < (datesFrom.length - 1); i += 1) {
ganttData = [{
id: 1, name: "Feature 1", series: [
{ name: "Planned", start: new Date(datesFrom[i]), end: new Date(datesTo[i]) },
{ name: "Actual", start: new Date(datesFrom[i]), end: new Date(datesTo[i]), color: "#f0f0f0" }
]
}];
};
答案 0 :(得分:1)
通常,要构建数组,您可以使用以下模式:
var ganttData = [];
for (...) {
ganttData.push({...});
}
在JavaScript中,与Ruby相反,array1 + array2
未定义:它将两个参数都转换为字符串并将它们连接起来。对于数组连接,您需要使用array1.concat(array2)
,或者如果您想要破坏性方法(即更改array1
),array1.push.apply(array1, array2)
;但是为了追加一个元素,push
是更好的选择。
答案 1 :(得分:1)
假设datesTo和datesFrom的长度相同,那么您将要创建一个数组(ganttData)并为每对日期推送一个新对象,如下所示:
var ganttData = [];
for(var i = 0; i < datesFrom.length; i++) {
ganttData.push({
id: i,
name: "Feature " + i,
series: [
{ name: "Planned", start: new Date(datesFrom[i]), end: new Date(datesTo[i]) },
{ name: "Actual", start: new Date(datesFrom[i]), end: new Date(datesTo[i]), color: "#f0f0f0" }
]
});
}