无法读取 parseParsedMessage 函数中 for 循环中未定义的属性(读取“长度”)

Cannot read properties of undefined (reading 'length') at for loop in parseParsedMessage function

提问人:seaworthiness 提问时间:8/18/2023 最后编辑:Barmarseaworthiness 更新时间:8/18/2023 访问量:36

问:

function parseMessage(message) {
    let retMessage = '';
    const startIndex = message.indexOf("### Rule ID:");
    const endIndex = message.indexOf("]");
    
    if(startIndex !== -1 && endIndex !== -1 && startIndex < endIndex){
        return message.substring(startIndex, endIndex);
    }
    else{
        return retMessage;
    }
}
function parseParsedMessage(inputString){
    let messagePart = inputString.split('--');
    finalMessagePart = messagePart[1];
    finalElements = [];
    let z = 1;
    for(let i = finalMessagePart.length+1; i > finalMessagePart.length; i--){
        let elements = finalMessagePart.trim().split('-');
        finalElements.push(elements);
    }
    return finalElements;
}
let message = "sbkjeheglhlasd";
let result = parseMessage(message);
let parsedResult = parseParsedMessage(result);

if(parsedResult.length === 0) {
    console.log("Rule ID does not follow the format");
}
else{
    console.log(parsedResult[0][0]);
    console.log(parsedResult[0][1]);
    console.log(parsedResult[0][2]);
    console.log(parsedResult[0][3]);
    console.log(parsedResult[0][4]);
    console.log(parsedResult[0][5]);
    console.log(parsedResult[0][6].replace(']',''));  
}

我正在尝试在规则 ID 不遵循特定形式时处理异常,如下所示 消息:

i have a fox with rule id ### tm_violation tm_location tm_market"

但是我收到此错误

TypeError:无法读取 undefined 的属性(读取“length”)

我该如何处理?

JavaScript 异常 错误处理

评论

0赞 Konrad 8/18/2023
result是一个空字符串,但您尝试拆分它

答:

0赞 Barmar 8/18/2023 #1

parseParsedMessage()应该检查是否至少返回两个部分。split()

function parseParsedMessage(inputString){
    let messagePart = inputString.split('--');
    if (messageParse.length < 2) {
        return [];
    }
    finalMessagePart = messagePart[1];
    finalElements = [];
    let z = 1;
    for(let i = finalMessagePart.length+1; i > finalMessagePart.length; i--){
        let elements = finalMessagePart.trim().split('-');
        finalElements.push(elements);
    }
    return finalElements;
}

评论

0赞 seaworthiness 8/18/2023
我的问题是我的无效规则 ID 也以相同的方式开始,但并没有完全遵循格式。例如无效的规则 ID ### 规则 ID:[asdfghjklT]
0赞 Barmar 8/18/2023
然后添加更多格式检查parseMessage
0赞 seaworthiness 8/18/2023
你能提供一些意见吗?我已经使用 log 语句进行了调试
0赞 Barmar 8/18/2023
我将验证移到了 .parseParsedMessage()