Javascript 二维数组中的对象推送

Javascript 二维数组中的对象推送,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我试图在Google Apps脚本中将字符串推送到2D数组,但我遇到了一些我不理解的奇怪行为。产生相同行为的简化版本如下: function arrayTest() { var mainArr, subArr, i, arrLoc; mainArr = []; subArr = []; for (i = 0; i < 5; i++) { mainArr.push(subArr); } for (i = 0; i < 10; i++) { arr

我试图在Google Apps脚本中将字符串推送到2D数组,但我遇到了一些我不理解的奇怪行为。产生相同行为的简化版本如下:

function arrayTest() {
  var mainArr, subArr, i, arrLoc;
  mainArr = [];
  subArr = [];
  for (i = 0; i < 5; i++) {
    mainArr.push(subArr);
  }
  for (i = 0; i < 10; i++) {
    arrLoc = Math.floor(Math.random() * 5);
    mainArr[arrLoc].push('test');
  }
  Logger.log(mainArr);
}
然而,情况并非如此。相反,我收到的是:

[['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test'], 
 ['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test'], 
 ['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test'], 
 ['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test'], 
 ['test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test']]
很明显,
'test'
for
循环的每个步骤中都会被推到
mainArr
中的每个位置,而不仅仅是位于数学函数生成的索引处的数组

这里是否有明显的遗漏,比如运算符不正确,或者我是否误解了数组的工作原理?如果您能提供一些指导,我们将不胜感激


谢谢。

那是因为你在一次又一次地将相同的数组推入主数组

function arrayTest() {
  var mainArr, subArr, i, arrLoc;
  mainArr = [];
  subArr = []; // <-- This creates an array and stores it in the variable 'subArr'
  for (i = 0; i < 5; i++) {
    mainArr.push(subArr); // <-- The very same array is pushed into mainArr over and over
  }
  ...
}

这是因为您正在一次又一次地将相同的数组推入主数组

function arrayTest() {
  var mainArr, subArr, i, arrLoc;
  mainArr = [];
  subArr = []; // <-- This creates an array and stores it in the variable 'subArr'
  for (i = 0; i < 5; i++) {
    mainArr.push(subArr); // <-- The very same array is pushed into mainArr over and over
  }
  ...
}

这回答了你的问题吗?这回答了你的问题吗?是的,已经修好了!谢谢你的迅速回复。是的,已经解决了!谢谢你的迅速回复。
function arrayTest() {
  var mainArr, subArr, i, arrLoc;
  mainArr = [];
  for (i = 0; i < 5; i++) {
    subArr = []; // <-- Here you create a brand new array and stores it in 'subArr'
    mainArr.push(subArr); // <-- The newly created array is pushed into 'mainArr'
  }
  ...
}