首页 > 解决方案 > 2D Javascript 数组未返回“第二维数组”的正确长度

问题描述

我正在尝试在 Javascript 中动态创建一个“2D”数组,但显然它更像是一个数组数组。数组中的每个数组(我在这里称为“第二维数组”)是根据用户上传的文件动态分配的。文件格式为:

表示文件表示的图形中的行数的整数。

表示构成该图形线条的坐标数的整数。

该行中的坐标,每对由换行符分隔。

另一个整数,表示绘图中下一行的坐标数。

该行中的坐标,每对由换行符分隔。

...ETC。

例如:

3

3

5.0 2.0

3.4 6.7

7.8 9.6

6

5.0 2.0

3.4 6.7

7.8 9.6

8.9 7.8

9.6 4.3

3.7 2.7

4

4.0 4.0

7.8 5.0

3.8 8.3

2.1 7.6

你明白了。

这是我将文件转换为字符串后解析文件的代码:

function parseDat(contents) {
    var dirtyArray = contents.split("\n");
    var fileArray = dirtyArray.filter(function (n) { return (n !== undefined && n !== null && n !== ""); });


        var lineArray = new Array(parseInt(fileArray[i], 10) + 1);
        lineArray[0] = fileArray[i];

        i++;

        for(var j = 1; j < lineArray.length; j++) {
            lineArray[j] = new Array(fileArray[i]);
            console.log(fileArray[i]);
            console.log("2d array length = " + lineArray[j].length);
            i++;
            for(var k = 0; k < lineArray[j].length; k++, i++) {
                lineArray[j][k] = fileArray[i];
            }

        }

        return lineArray;


}

基本上,我检查了第二维数组的长度,在我给出的示例文件中,第一行应该是 3。console.log(fileArray[i]) 返回正确的数字,但是当我使用 lineArray[j].length 时,由于某种原因,答案总是 1。我已经检查了很多其他来源的 Javascript 中的二维数组,这检查第二维数组长度的方法总是适用于他们。

请帮忙,我知道这可能只是我犯的一些愚蠢的错误。

标签: javascriptarrays

解决方案


也许你可以“忽略”这个问题。如果console.log(fileArray[i])确实给出了正确的数字,您可以在下面的 for 语句中执行此操作:

for(var k = 0; k < lineArray[i]-1; k++, i++) {
    lineArray[j][k] = fileArray[i];
}

-1 因为你事先用 i++ 递增它。或者你只是在递增之前声明一个新的 var 并在你的 for 语句中使用它。可能有点懒惰的欺骗方式,但您的代码可能会按预期工作。


推荐阅读