google-apps-script - Google 脚本属性会更改类型吗?
问题描述
我正在尝试将字符串列表存储为全局变量,并能够在不同的脚本中附加到它。根据这个答案,实现相同结果的一种方法是使用 PropertyService 和 Properties。我已经定义了一个全局文档属性变量,并且可以在其中获取和设置属性。但是,如果我设置一个键来保存一个数组,那么当我下次获取属性时,它就不会像数组一样工作。
MWE:
var ps = PropertiesService.getDocumentProperties();
function propTest() {
var d = ps.getProperties();
if ("a" in d){
// a is already defined
var list = d.a;
list.push("Hello"); // This causes TypeError: Cannot find function push in object [Lnumber;@57220e4c.
// d["a"].push("Hello"); // This line gives exactly the same error
} else {
// a has not yet been defined
var a = [];
a.push("Hello"); // Works fin as an array before being set in the Properties.
}
d.a = a;
ps.setProperties(d)
}
function reset(){
ps.deleteAllProperties();
}
关于如何解决这个问题的任何想法?
解决方案
经过一番检查,我意识到这些值是作为字符串存储的。
像这样用JSON转换解决了这个问题
var ps = PropertiesService.getDocumentProperties();
function propTest() {
var d = ps.getProperties();
if ("a" in d){
var a = JSON.parse(d.a); // <- parsing
a.push("Hello")
} else {
var a = [];
a.push("Hello");
}
d.a = JSON.stringify(a); // <- stringifying
ps.setProperties(d)
}
function reset(){
ps.deleteAllProperties();
}
推荐阅读
- cjson - 如何检查 cJSON 指针是否较早初始化/设置?
- intellij-idea - Asciidoc 包含错误的图表
- kotlin - TornadoFX 获取对选项卡的引用并获取其舞台
- gekko - 使用 Gekko 优化,为什么我的模型构建器比我的求解器慢得多?
- sql - oracle 更新中的 FORALL LOOP 不考虑 where 子句(在 SAS proc sql 内)
- c# - 如何混合使用数据库优先和代码优先方法
- tfs - TFS 2018 不允许我重命名文件夹
- json - 解析特定关键字段的 JSON 输出
- objective-c - Objective-C 初始化的怪癖
- javascript - 使用调度更改 obj 的特定值