JS循环不起作用(变量未定义,但单个选择有效)

时间:2017-02-05 12:34:30

标签: javascript

我完全难过了.. 我上传了一个csv文件到我的数据库,现在我的应用程序应该“玩”它..

在我选择之后,我想将此文件拆分为他的元素。这是我的代码:

var file = result[0].FILE;
var entries;
var lines = {
    line: []
};
var i;
var allLines = file.split(/[\r\n]+/g);

for(i = 0; i <= allLines.length; i++) {
    entries = allLines[i].split(';');
    lines.line.push({
        DATEVALUE: entries[0],
        VALUE: entries[1]
    });
}

我收到了这个错误:

  

allLines [i]未定义

嗯...... allLines的长度为182个元素,如果我使用的是allLines[0]allLines[1]而不是allLines[I],那么一切都可以。 但为什么循环不起作用

我的选择看起来像(使用JSON.stringify()输出):

  

[       “2014-01-01 00:00:00; 309”,       “2014-01-02 00:15:00; 198”,       “2014-01-03 00:30:00; 274”,       “2014-01-04 00:45:00; 140”,       “2014-01-05 01:00:00; 167”,       “2014-01-06 01:15:00; 276”,       “2014-01-07 01:30:00; 283”,       “2014-01-08 01:45:00; 304”,......]

1 个答案:

答案 0 :(得分:0)

数组是0索引的(它们的下标从0开始)。因此,如果数组包含N个元素且第一个元素为0,那么最后一个元素将是N - 1而不是N。因此array[array.length]undefined。从此更改for循环:

for(i = 0; i <= allLines.length; i++) {
    // ...

到此:

for(i = 0; i < allLines.length; i++) {
    // ...

<强> MATH

TheNumberOfItems = LastItemIndex - FirstItemIndex + 1;

这样:

array.length = x - 0 + 1; // where x is the index of the last item

然后:

x = array.length - 1;

所以数组的最后一个元素是array.length - 1而不是array.length。因此,如果循环的条件为i <= array.length,那么将在某个时刻评估array[array.length]undefined)。