【问题标题】:Google App Script arrays谷歌应用脚​​本数组
【发布时间】:2015-12-06 12:15:16
【问题描述】:

我正在研究 Google Script,并且正在测试创建二维数组的不同方法。 我创建了一个这样的数组:

  var codes = new Array(6);
  for (var i = 0; i < 6; i++) {
  codes[i] = new Array(4);
  }
  codes[0][0]="x"; 
  codes[0][1]="x"; 
  codes[0][2]="x"; 
  codes[0][3]="x";
  codes[1][0]="x";
  codes[1][1]="x";
  codes[1][2]="x"; 
  codes[1][3]="x";
  codes[2][0]="x";
  codes[2][1]="x";
  codes[2][2]="x";
  codes[2][3]="x";
  codes[3][0]="x";
  codes[3][1]="x";
  codes[3][2]="x";
  codes[3][3]="x";
  codes[4][0]="x";
  codes[4][1]="x";
  codes[4][2]="x";
  codes[4][3]="x";
  codes[5][0]="x";
  codes[5][1]="x";
  codes[5][2]="x";
  codes[5][3]="x";

而且它工作正常。

我阅读了以下链接 hereherehere

但是当我这样做时:

var codes = new Array(6);
  for (var i = 0; i < 6; i++) {
  codes[i] = new Array(4);
  }
codes[0]=["x","x","x","x"];
codes[1]=["x","x","x","x"];
codes[2]=["x","x","x","x"];
codes[3]=["x","x","x","x"];
codes[4]=["x","x","x","x"];
codes[5]=["x","x","x","x"];

没用,所以我这样尝试:

var codes = new Array([["x","x","x","x"],["x","x","x","x"],["x","x","x","x"],["x","x","x","x"],["x","x","x","x"],["x","x","x","x"]]);

它也没有用。

当代码不起作用时,我没有收到任何错误,只是没有显示值。

我做错了什么?它看起来是相同的代码,并且在许多文档中都推荐了这两种不工作的方式。

【问题讨论】:

    标签: javascript arrays multidimensional-array google-apps-script


    【解决方案1】:

    W3schools 表示不需要使用new Array()。 为了简单、可读性和执行速度,请使用文字方法 ex:

    var animals = ["cat", "rabbit"];

    您的代码无法正常工作的原因是您在循环内等于codes,并且在循环范围“代码”结束后仅获取最后一组数组。相反,您应该将这些数组推送到codes

    var codes = [];
    for (var i = 0; i < 6; i++) {
      codes.push([i]);
    }
    console.log(codes)
    codes[0]=["x","x","x","x"];
    codes[1]=["x","x","x","x"];
    codes[2]=["x","x","x","x"];
    codes[3]=["x","x","x","x"];
    codes[4]=["x","x","x","x"];
    codes[5]=["x","x","x","x"];

    【讨论】:

    • 我没有看到 new Array() 是一个糟糕的解决方案。谢谢。
    【解决方案2】:

    更好的是,两个 for 循环来创建双数组:

    var codes = [], // Initiate as array, in Javascript this is actually fastre than using new (I don't know any cases you should use new)
        rows = 6,
        columns = 6;
    
    for (var i = 0; i < rows; i++){
        codes.push([]); // Initiate 
        for (var j = 0; j < columns; j++){
            codes[i][j] = 'x';
        }
    }
    

    其他想法,使用正确的列预先启动一个数组,然后复制:

    var arrTemp = [],
        codes = [],
        rows = 6,
        columns = 6;
    
    for (var j = 0; j < columns; j++)
        arrTemp[i] = 'x';
    
    for (var i = 0; i < rows; i++)
        codes.push( arrTemp.slice(0) ); // If you just push the array without slice it will make a reference to it, not copy
    

    使用 'x's 预初始化数组的其他方式:

    arrTemp = Array.apply(null, Array(columns)).map(function () {return 'x'});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      相关资源
      最近更新 更多