[英]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.