javascript - JavaScript,无法读取 null 的属性“映射””,嵌套 ForEach?
问题描述
我有一个带有 3 个函数的脚本(特别是 google 应用程序脚本)gather()、getGmail() 和 parseEmail() ...
function gather() {
let messages = getGmail();
let curSheet = SpreadsheetApp.getActive();
messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}
function getGmail() {
const query = "label:MySummaryList NOT label:done";
let threads = GmailApp.search(query);
let label = GmailApp.getUserLabelByName("done");
if (!label) {label = GmailApp.createLabel("done")}
let messages = [];
threads.forEach(thread => {
messages.push(thread.getMessages()[0].getPlainBody());
label.addToThread(thread);
});
return messages;
}
function parseEmail(message){
let parsed = message.replace(/=\n/g, '') //replace =newline with nothing
.split(','); //split on commas
let result = parsed;
return result;
}
这 3 个函数非常适合将 1 封 gmail 电子邮件解析为 1 个电子表格行。问题是我试图解析的 gmail 是一个需要导致多个电子表格行的摘要。
我有这个匹配代码我想添加到函数 parseEmail() ...
//.split(','); //split on commas //commented out with inclusion of match code
.match(/5px">(.*?)<\/b>/g).map(function(val){return val.replace(/<\/?b>/g,'').replace(/5px">/g,'').trim();});
...成功匹配 gmail 消息文本...
5px">First text in array </b> random text 5px"> Second text in array </b>
...并返回一个这样的数组...
[“数组中的第一个文本”,“数组中的第二个文本”]
所需的结果是这样的电子表格行...第 1 行列 A:数组中的第一个文本第 2 行第 A 列:数组中的第二个文本...等等,对于数组中捕获的所有匹配项
当我将匹配代码添加到函数 parseEmail() 时,我收到错误消息“TypeError: Cannot read property 'map' of null”。我假设函数gather() 期望单个拆分字符串附加1 个电子表格行,现在我传入一个由匹配代码产生的数组。我是否需要在函数gather() 中嵌套forEach 来遍历匹配数组?还是我的方法完全有缺陷?感谢您考虑我的问题!
解决方案
推荐阅读
- javascript - vue.js 可以使用自定义指令插入子元素或子组件吗
- java - 为什么递归导致计数返回 2 而不是 4?
- java - 访问字段时出错 [Springboot 数据 JPA 中的私有 int?
- android - Admob 再次限制广告投放,因为 Google Play 商店暂停了一个应用程序
- c# - 反序列化 api 调用响应内容,而无需创建表示内容的模型
- icons - 如何使用 lottie-web 在 angular11 中获取动画图标?
- django - 将特定组的 django 用户排序在顶部
- python - 如何在 Djando Rest Framework 中设置嵌套的相关字段序列化器?
- java - 无法单击按钮(测试)
- android - 在 Android 应用程序中显示来自用户 Twitter 帐户的推文