Google App Script arrays



我正在使用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";

它工作得很好。

我在这里、这里和这里阅读了以下链接。

但是当我这样做的时候:

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

它也不工作。

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

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

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"];

更好的是,使用两个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'预初始化数组的另一种方法:

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

相关内容

  • 没有找到相关文章

最新更新