Javascript 调用深层嵌套数组
我有一个预期的JSON负载,它在嵌套数组/对象中相当深入。因为我根据假设的结构分配变量Javascript 调用深层嵌套数组,javascript,google-apps-script,Javascript,Google Apps Script,我有一个预期的JSON负载,它在嵌套数组/对象中相当深入。因为我根据假设的结构分配变量 { id: value1, name: value2, data: { status: complete, date: 2020 - 06 - 20, notes: { field1: "user notes", field2: "more user notes" } } } 在我的代码中,我将进
{
id: value1,
name: value2,
data: {
status: complete,
date: 2020 - 06 - 20,
notes: {
field1: "user notes",
field2: "more user notes"
}
}
}
在我的代码中,我将进行如下调用:
var usernote = payload.data.notes.field1 || "No Notes"
priorityvar = payload.data.form_values["b691"][index]["form_values"]["d54d"]["choice_values"][0]
但是可能会出现这样的情况:用户没有发出任何注释,因此notes对象将返回为未定义。在不进行一组级联默认检查的情况下,是否存在这种情况?我的一些电话如下所示:
var usernote = payload.data.notes.field1 || "No Notes"
priorityvar = payload.data.form_values["b691"][index]["form_values"]["d54d"]["choice_values"][0]
任何帮助都将不胜感激,我在搜索中找不到类似的答案(但对这里来说也很陌生)。另外,我在谷歌脚本中工作,所以我不能使用任何ES6内容。我唯一能想到的避免多次检查的方法(因为您使用的是谷歌脚本,“不能使用任何ES6内容”),就是使用
try catch
方法
这将为您验证整个表达式,因此您不必担心对象中的单个键验证:
var usernote;
try {
usernote = payload.data.notes.field1;
} catch (error) {
usernote = "No Notes";
}
适用于能够使用更新技术的人 新的ECMA脚本2020上周刚刚发布,现在已经是正式的了 它允许您这样做,并且不必担心这些值中是否有未定义的值:
var usernote = payload?.data?.notes?.field1 || "No Notes"
从文件中:
可选的链接操作符允许读取位于连接对象链深处的属性值,而无需明确验证链中的每个引用是否有效
您可以使用lodash的
\uj.get(obj,path,defaultValue)
函数。它将尝试访问与给定路径匹配的对象内的值。下面是中的一些示例
如果无法导入lodash,请尝试实现一个
附言。
我不小心发布了链接到中文文档的链接。我已经更新了它,现在它链接到了英文版本。应用程序脚本支持ES6,但不支持ES2020@TheMaster这里有什么我遗漏的吗?这个链接似乎表明ES6还没有实现?只有ES6“模块”没有实现。谢谢,这是有效的。不幸的是,这不是最干净的解决方案,因为我有很多电话,非常恼火我不能使用更干净的ECMA20版本!这看起来是一个很好的解决方案,但我还没有开始使用GAS中的库,所以可能会开始,也不知道为什么,但该链接是粤语的(我相信?)和英语链接