gpt4 book ai didi

javascript - 全局保存数组

转载 作者:行者123 更新时间:2023-12-02 06:32:36 25 4
gpt4 key购买 nike

我要实现的目标

我有一个包含 2 张 AB 的电子表格。

  • A 有 2 列 - 名称、金额(主列表)

  • B 有 4 列 - 名称、金额、X、Y(交易列表)

Sheet B

Name 列引用Sheet AName 列作为数据。 Whenever a name is selected, I want to populate Amount column in B with Amount in column of sheet A as a placeholder which users can override.为此,我计划将 Sheet A 数据加载到一个数组(全局可用)中,以便在 onEdit(e) 中我可以引用该数组而不是访问 工作表 B.

但我能找到的选项 - CacheServicePropertyService - 只保存字符串值。但我想要:

var myGlobalArray = [];

function on init(){
//iterate and fill the array such that it has following output
//myGlobalArray[Name1] = 1
//myGlobalArray[Name2] = 2
//myGlobalArray[Name3] = 3
}

function onEdit(e){
//if selected value is name1, populate myGolbalArray[Name1] value in Amount
}

问题在哪里以及如何定义 myGlobalArray?

我尝试将缓存服务与 JSON.StringifyJSON.parse 一起使用,但数组在 onEdit 中为空。

最佳答案

每次调用你的脚本都会创建一个新的脚本实例,它有自己独特的全局变量。每次调用脚本时,您实际上都会为该特定实例找到一个全局“this”。您将 PropertyService 视为保存数据的持久方式是正确的。

马上我看到你的 globalArray 设置不正确:

var myGlobalArray = [];

需要

 var myGlobalArray = {};
myGlobalArray['name1'] = 1
myGlobalArray['name2'] = 2
myGlobalArray['name3'] = 3

//myGlobalArray = {name3=3.0, name1=1.0, name2=2.0}
var stringArray = JSON.stringify(myGlobalArray)
//{"name1":1,"name2":2,"name3":3};

现在可以将其保存到属性存储区并从中读取。

PropertiesService.getScriptProperties().setProperty("NameArray", stringArray);
stringArray = PropertiesService.getScriptProperties().getProperty("NameArray");
myGlobalArray = JSON.parse(stringArray);
Logger.log(myGlobalArray['name1']) // returns 1

关于javascript - 全局保存数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com