Google Sheets Apps Script中向数组添加元素后变量值未更新问题
问题原因与解决办法:数组长度变量未更新的问题
这是个很典型的JavaScript基本类型特性导致的问题,我来给你拆解清楚:
问题原因
JavaScript里的数值属于基本数据类型,当你执行var dimensions = newarray.length;时,并不是让dimensions和数组的长度建立“绑定关系”,而是把当时数组的长度值(也就是2)复制了一份给dimensions变量。这个变量从此就是一个独立的数值,和原数组再也没有关联——哪怕之后数组的长度因为push操作变成了3,dimensions里保存的依然是最初的2。
看你的代码片段就能更直观地理解:
var newarray = [ ["A","B"], ["C","D"] ]; var dimensions = newarray.length; // 此时dimensions = 2,是独立数值 ss.getRange(15,8).setValue(dimensions); // 单元格写入2 newarray.push(["Bharat","Lata"]) // 数组长度变为3,但dimensions还是2 ss.getRange(18,8).setValue(newarray.length); // 直接取最新长度,写入3 ss.getRange(21,8).setValue(dimensions); // 写入的还是旧值2
解决办法
有两种简单的方式可以达到你预期的效果:
方式一:直接使用数组的length属性
每次需要获取数组长度时,直接调用newarray.length,而不是依赖提前保存的变量。这样每次拿到的都是数组的最新长度:
var newarray = [ ["A","B"], ["C","D"] ]; ss.getRange(15,8).setValue(newarray.length); // 写入2 newarray.push(["Bharat","Lata"]) ss.getRange(18,8).setValue(newarray.length); // 写入3 ss.getRange(21,8).setValue(newarray.length); // 写入3,符合预期
方式二:用函数封装获取长度的逻辑
如果一定要用类似“变量”的形式来跟踪长度,可以把它封装成一个函数,每次调用函数时返回最新的数组长度:
var newarray = [ ["A","B"], ["C","D"] ]; var getDimensions = () => newarray.length; // 函数每次返回最新长度 ss.getRange(15,8).setValue(getDimensions()); // 写入2 newarray.push(["Bharat","Lata"]) ss.getRange(18,8).setValue(getDimensions()); // 写入3 ss.getRange(21,8).setValue(getDimensions()); // 写入3
内容的提问来源于stack exchange,提问作者dolfus61
相关产品推荐
相关产品推荐

