Javascript 二维数组中的对象推送
我试图在Google Apps脚本中将字符串推送到2D数组,但我遇到了一些我不理解的奇怪行为。产生相同行为的简化版本如下: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
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'
}
...
}