首页 > 解决方案 > 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();
}

关于如何解决这个问题的任何想法?

标签: google-apps-script

解决方案


经过一番检查,我意识到这些值是作为字符串存储的。

像这样用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();
}

推荐阅读