我有一个从JS传递到GS的对象数组。 这是一个对象数组的外观示例(根据用户输入而变化)
var playersArray =
[
{number=1,
role=Arsonist,
deathStatus=false,
guardianTargetStatus=false,
executionerTargetStatus=false,
roleblockStatus=false},
{number=2,
role=Arsonist,
deathStatus=false,
guardianTargetStatus=false,
executionerTargetStatus=false,
roleblockStatus=false},
{number=3, role=Arsonist,
deathStatus=false,
guardianTargetStatus=false,
executionerTargetStatus=false,
roleblockStatus=false}
]
在我的代码中,我需要从该数组中调用一些数据。例如
var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);
当我直接在函数之间传递此playersArray时,一切都会变好。 不幸的是,对于我的功能之一,我需要拉这个数组而不直接传递它。
因此,我已将playerArray设置为GS中的属性
PropertiesService.getScriptProperties().setProperty('playersArray', JSON.stringify(playersArray));
然后我在相关函数中使用getProperty获取此数组:
var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
playersArray = playersArray.split(",");
由于某种原因,当我这样做时,函数无法正确看到数组:
var roleList = playersArray.map(function(role) {return role.role;});
Browser.msgBox(playersArray[1]["role"]);
请帮助我解决此问题。如果我用于将数组作为全局数组传递的解决方案不可行,那么我很高兴看到其他解决方案。但这必须是全局的,因为我不能在函数之间直接传递数组。
答案 0 :(得分:1)
playersArray
作为数组对象。如果我的理解是正确的,那么该修改如何?
var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = playersArray.replace(/\"/g, "").replace(/\:/g, "=");
playersArray = playersArray.split(",");
var playersArray = PropertiesService.getScriptProperties().getProperty('playersArray');
playersArray = JSON.parse(playersArray);
playersArray
可能类似于var playersArray = [{number: 1, role: "Arsonist", deathStatus: false, guardianTargetStatus: false, executionerTargetStatus: false, roleblockStatus: false},,,]
。因为在将对象放入PropertiesService之前,Browser.msgBox(playersArray[1]["role"])
才可以工作。当您看到playersArray
的{{1}}时,您可能会像Logger.log(playersArray)
一样看到。当var playersArray = [{number=1, role=Arsonist, deathStatus=false, guardianTargetStatus=false, executionerTargetStatus=false, roleblockStatus=false},,,]
是对象时,当playersArray
看到对象时,Logger.log(playersArray)
将转换为:
。我认为这是Google Apps脚本的规范。因此可以将使用=
放入PropertiesService的对象转换为使用JSON.stringify()
的对象。如果我误解了你的问题,我表示歉意。