用于创建数组数组的Javascript循环(不循环遍历数组数组)

时间:2015-08-06 01:59:12

标签: javascript arrays loops

我正在尝试遍历两个日期数组dateFromdateTo以在甘特图插件中使用。甘特图需要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" }
        ]
    }];
};  

2 个答案:

答案 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" }
    ]
  });
}