Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用深层嵌套数组_Javascript_Google Apps Script - Fatal编程技术网

Javascript 调用深层嵌套数组

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" } } } 在我的代码中,我将进

我有一个预期的JSON负载,它在嵌套数组/对象中相当深入。因为我根据假设的结构分配变量

{
  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中的库,所以可能会开始,也不知道为什么,但该链接是粤语的(我相信?)和英语链接