javascript - 推送到二维数组中的对象
问题描述
我正在尝试将字符串推送到 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']]
很明显,'test'
它被推到循环mainArr
的每一步中的每个位置for
,而不仅仅是位于 Math 函数生成的索引处的数组。
我在这里是否遗漏了一些非常明显的东西,例如不正确的运算符,或者我误解了数组的工作原理?一些指导将不胜感激!
谢谢。
解决方案
那是因为你一遍又一遍地将同一个数组推入主数组。
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
}
...
}
但我认为你想要的是创建多个数组并将它们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'
}
...
}
推荐阅读
- javascript - 如何将 chessboard.js 节点模块导入 Angular 项目?
- python - 映射/连接到发布 Django 网站时的错误请求问题
- sql - IBM Db2 on Cloud 中使用的 SQL 方言是什么
- visual-studio-code - 在 Visual Studio Code 中的模板字符串之间添加用户创建的片段
- forth - 在 Forth 中执行一个字符或字符串,就好像它是一个单词一样
- python - python中的回溯是什么?
- python - 如何在 Python 中实现和执行多个类的线程?
- django-views - 类型错误 Django 3.0.4:运行服务器时出现类型错误
- javascript - “枚举”具有自定义数字序列的字符串?
- azure - 如何在 Azure 广告(客户 API)中请求具有范围的访问令牌