Array.splice(index,0,data)返回神秘的null并增加数组大小(长度)

时间:2018-03-25 08:24:50

标签: arrays google-apps-script

我尝试使用array.splice()将数据放入数组中的特定位置。这样我就可以从sheet1获取数据到右栏中的主页。

到目前为止看起来如何。
(代码实际上在Logger.log中正确返回)

var header1 = data1[0]; //Header of Sheet1
var header2 = data2[0]; //Header of sheet2
var newData = new Array(44); //There are 45 columns

for (i in data1) {
  if (i > 0) { //Take Row by Row Except Header of Sheet1
  var row = data1[i];
  if (row != "") {

    for (j in data2) { //Searching Through All Rows of Sheet2
      var row2 = data2[j];
      if (row[0] == row2[4]) { //If Data In Column Match That Row, Proceed
        //Getting the Right Index of SameName Column
        for (i in header2) {
          var col = header2[i];
          for (j in header1) {
            var col2 = header1[j];
            if (col == col2) {
              Logger.log(j+" "+row2[i]);
              newData.splice(j,0,row2[i]);
            }
          }
        }
      }
    }
  }
}

之前正确返回1行:

  

Logger.log(j +"" + row2 [i]);   42时间戳

  3名称
  4姓氏   2 DoB
  0 ID



1类型
//所有数据都使用正确的索引正确返回(并且没有为空)

以下问题:

  

Logger.log(newData);
  [ID,Type,null,null,DoB,null,....,TimeStamp,null,null]
  DoB在Logger.log的前一行中的索引为2,但不知何故,数组在pos2处为null。   另外...... newData.length从44增加到68

不知何故,索引和数据在数组中稍后混淆了。
提前感谢你们所有人。

1 个答案:

答案 0 :(得分:0)

如果您记录新实例化的数组,您将看到默认情况下,所有数组元素都被赋值为'null'。在JavaScript中,数组是动态的,这意味着它们的大小不是预先确定的。

假设对于某些行,条件'if(row [0] == row2 [4])'的计算结果为'false',则会跳过某些索引。当然,它会在固定大小的数组中生成null元素。

使用数组文字表示法和Array.prototype.push()方法添加新元素:

void queueDump(FILE *f, Queue *q, void(*dumpfunction)(FILE *f, void *e)) {
    fprintf(f, "(%d) --  ", q->size);
    for (InternalQueue *c=q->head; c != NULL; c = c->next)
        dumpfunction(f, c->value);
}

void printToken(FILE *f, void *e) {
    Queue *q;
    if (!f) {
        printf("Erreur d'ouverture du fichier\n");
        exit(1);
    }
    fprintf(f, "Infix : ");
    queueDump(f, q, printToken(f, e));
    fclose(f);
}

此外,您不应该使用'for in'循环来迭代数组。使用它正是您没有看到记录“空”值的原因。更多细节Why is using "for...in" with array iteration a bad idea?