繁体   English   中英

在二维数组中推送到 object

[英]Pushing to object in 2D array

我正在尝试将字符串推送到 Google Apps 脚本中的二维数组,但我遇到了一些我不理解的奇怪行为。 产生相同行为的简化版本在这里:

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'推入数学函数生成的索引处的任何数组中 - 所以如果生成的数字是 0、2、1、4、4、3、0、2、1、0我以为我会收到:

[['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', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test', 'test']]

很明显,在for循环的每个步骤中, 'test'被推送到 mainArr 中的每个mainArr ,而不仅仅是数学 function 生成的索引处的数组。

我在这里遗漏了什么明显的东西,例如不正确的运算符,还是我误解了 arrays 的工作原理? 一些指导将不胜感激!

谢谢。

那是因为你一遍又一遍地将同一个数组推入主数组。

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
  }
  ...
}

但我认为您想要的是创建多个 arrays 并将它们单独推送到mainArr中,因此您的代码应如下所示:

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'
  }
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM