首页 > 解决方案 > 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 来遍历匹配数组?还是我的方法完全有缺陷?感谢您考虑我的问题!

标签: javascriptarraysforeach

解决方案


推荐阅读