修改Google Apps Script二维数组单个元素却全部改变,我哪里错了?
二维数组修改单元素却批量变化的原因与解决方法
问题原因
你用Array(2).fill(Array(5).fill(0))创建二维数组时,fill方法会把同一个子数组的引用重复填充到外层数组的每个位置。也就是说,total[0]和total[1]指向的是同一个数组对象。修改total[0][3]本质是修改这个共享的子数组,所以所有外层数组的子元素都会同步变化。
正确的创建方式
要让每个子数组独立,避免引用共享,有两种常用方法:
方法1:用Array.from生成独立子数组
function tryMe(){ const total = Array.from({length: 2}, () => Array(5).fill(0)); Logger.log('Initial array : '); Logger.log(total); total[0][3] = 50; Logger.log('Replacing element (0, 3) with 50 : '); Logger.log(total); }
Array.from的映射函数会为每个外层数组元素生成新的子数组,确保每个子数组都是独立对象。
方法2:循环初始化子数组
function tryMe(){ const total = []; for(let i = 0; i < 2; i++){ total.push(Array(5).fill(0)); } Logger.log('Initial array : '); Logger.log(total); total[0][3] = 50; Logger.log('Replacing element (0, 3) with 50 : '); Logger.log(total); }
通过循环逐个创建并推入新的子数组,同样能保证子数组之间互不关联。
效果验证
修改后运行代码,只有total[0][3]会被设为50,total[1][3]保持0,符合你只修改单个元素的预期。
内容的提问来源于stack exchange,提问作者Sh00tthem
相关产品推荐
相关产品推荐

