JavaScript split()方法导致undefined

时间:2014-01-12 14:17:30

标签: javascript jquery arrays split text-files

我正在研究一个简单的程序,它将从数组中选择一个随机字符串。

我从一个预定义的数组开始,但是大约一半时间想知道使用text file (.txt)是否更简单(或更优雅),因为我有超过1000个项目。

我在这里找到了这个解决方案(对此我没有信用),它对我有用......

function readTextFile(file) {
    var items = [];
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function() {
        if(rawFile.readyState === 4)
        {
            if(rawFile.status === 200 || rawFile.status === 0)
            {
                var items = rawFile.responseText.split('\n');
                alert(items[0]);
            }
        }
    };
    rawFile.send(null);
}

readTextFile('source.txt');

......在某种程度上。

我希望array items[]每个项目包含一行。换句话说,我想分开每一行。但是,当我使用items[0]时,split('\n')后所有数组项都是不可取的。

上面例子中的

items[0]成为第一句话,所以这是正确的。如果我想alert items[1]我未定义。

如果我使用其他分割点,例如split(''),它可以正常工作,每个项目仅分隔每个字符,直到换行,之后我再次定义。

让我们说.txt is "asd"的第一行: 所以'asd'在数组中定义为:

items[0] = 'a'
items[1] = 's'
items[2] = 'd'
items[3] = undefined

这就是我要得到的。我哪里错了?

文本文件的内容:

asfe
asdasdasd
asdasd

fgfg

3 个答案:

答案 0 :(得分:3)

尝试添加String cast:

var items = String(rawFile.responseText).split('\n');

答案 1 :(得分:1)

经过一番讨论之后,我认为问题在于您的文本编辑器使用由\r而不是\n组成的换行符来保存文件,可能是基于Unix的服务器?

无论如何,你可以替换它们,它应该有效:

var rawText = rawFile.responseText;
rawText = rawText.replace(/\r\n/g, "\n");
rawText = rawText.replace(/\n\r/g, "\n");
rawText = rawText.replace(/\r/g, "\n");
var items = rawText.split('\n');

答案 2 :(得分:0)

可能是因为responseText末尾有一个空白行。尝试使用trim()

var items = rawFile.responseText.trim().split('\n');