You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中向空数组存储数据却返回空数组的异常问题咨询

问题根源与解决方案

这个问题其实是Google Apps Script对Array类型的特殊处理导致的,并非Bug。

为什么会出现这种矛盾现象?

在普通JavaScript环境中,你可以给Array对象添加任意非数字索引的属性(比如wrapper.date),虽然这不是最佳实践,但这些属性确实会存在于对象上。不过在Google Apps Script里,数组会被严格当作“索引集合”来处理:

  • 只有数字索引(0、1、2...)对应的元素会被视为数组的一部分
  • 你添加的非索引属性(比如date、medium)虽然能通过对象属性访问(比如wrapper.date),但不会被纳入数组的序列化(JSON.stringify)或日志输出中,所以你会看到JSON.stringify(wrapper)返回[],最终newtableData里全是空数组。

修复方案

把存储键值对的容器从Array改成普通对象{}即可,因为对象天生就是用来存储键值对的:

修改这段代码:

var wrapper = new Array();

为:

var wrapper = {};

修改后,你的键值对会被正确存储,JSON.stringify(wrapper)会输出预期的{"date":"20220301","medium":"(none)",...},最终newtableData也会是包含正确对象的数组,而不是空数组的集合。

补充说明

虽然在普通JS里给数组加属性能“凑合用”,但这本身就是不规范的写法——数组是用来存储有序的索引型数据,对象才是存储键值对的正确选择。Google Apps Script的这种处理其实是在强制规范的代码实践,避免开发者混用数组和对象的用途。

内容的提问来源于stack exchange,提问作者Alexander Kozlovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:24:06