按换行拆分“未定义”

时间:2016-05-17 01:16:46

标签: javascript jquery

我有一个文本文件,我用新行分隔。

$.get("2016-05-06.log", function(data){
    var lines = data.split("\n");
    $.each(lines, function(n, elem) {
       var piece = elem.split("]");
       console.log(n, ": ", elem);
    });

然而,数组lines中的第一项,即n = 0,返回未定义。这个数组是不是零索引的吗?或者我错过了什么?

编辑:以下是我日志文件中的最新内容。

[Wed May 04 13:48:44 2016] [error] [client 0.0.0.0] PHP Warning:  Missing argument 1 for getTypeOptionList(), called in /var/www/...proposal.php on line 969 and defined in /var/www/Intranet2/trunk/contracts/functions.php on line 149, referer: http://intranet/...
[Wed May 04 13:48:44 2016] [error] [client 0.0.0.0] PHP Warning:  /var/www/...proposal.php on line 1048 and defined in /var/www/Intranet2/trunk/contracts/functions.php on line 373, referrer: http://intranet/...

2 个答案:

答案 0 :(得分:0)

您的代码正常运行。

必须有很多原因。

好像你的文件有utf-8 BOM元素或其他东西。

要证明它有一些test.log文件并一个接一个地写入数据,然后检查您的代码。 也许你最好检查线条变量是否为空。

$(function() {
  $.get("http://num8er.me/test.log", function(data){
    var lines = data.split("\n");
    for(var n = 0; n < lines.length; n++) { 
       var line = lines[n].toString().replace(/^\s+|\s+$/gm,'');
       if(line != '') {
         alert(n + ": " + line);
       }
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

这在JavaScript中似乎是可能的。我在Windows 10的Node.js v10.11.0上使用WebStorm IDE评估表达式得到以下结果。字符串“ | \ n”分为3个部分,其中RegularExpression / ^(\ w | \ s)* \ | /,未定义第二部分。

这与您的示例中的第一个元素未定义的情况不同,因此它不仅仅涉及数组的开头或其他内容。而且我的模式中没有换行符,但是字符串被分割了,它不是字符串中的第一个字符。因此,总而言之,您的示例似乎并不是唯一可能发生的情况。

"|\n" . split( /^(\w|\s)*\|/ ) [0]  // -> ""
"|\n" . split( /^(\w|\s)*\|/ ) [1]  // -> undefined
"|\n" . split( /^(\w|\s)*\|/ ) [2]  // -> "\n"

我本以为split()总是返回一个字符串数组。但似乎并不总是如此。不要指望它永远不会被定义。