2D Javascript数组未返回“第二维度数组”的正确长度
我试图用Javascript动态创建一个2D数组,但显然它更像是一个数组数组。数组中的每个数组(这里我将调用一个二维数组)都是根据用户上传的文件动态分配的。该文件的格式为: 整数,表示文件所代表图形中的线数 整数,表示构成该图形线条的坐标数 该行中的坐标,每对由新行分隔 另一个整数,表示图形中下一行的坐标数 该行中的坐标,每对由新行分隔 ……等等 例如: 三, 三, 5.02.0 3.4.6.7 7.8.9.6 六, 5.02.0 3.4.6.7 7.8.9.6 8.9.7.8 9.6.4.3 3.7.2.7 四, 4.04.0 7.8.5.0 3.8.3 2.17.6 你明白了 以下是我在文件转换为字符串后解析该文件的代码:2D Javascript数组未返回“第二维度数组”的正确长度,javascript,arrays,Javascript,Arrays,我试图用Javascript动态创建一个2D数组,但显然它更像是一个数组数组。数组中的每个数组(这里我将调用一个二维数组)都是根据用户上传的文件动态分配的。该文件的格式为: 整数,表示文件所代表图形中的线数 整数,表示构成该图形线条的坐标数 该行中的坐标,每对由新行分隔 另一个整数,表示图形中下一行的坐标数 该行中的坐标,每对由新行分隔 ……等等 例如: 三, 三, 5.02.0 3.4.6.7 7.8.9.6 六, 5.02.0 3.4.6.7 7.8.9.6 8.9.7.8 9.6.4.3
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.logfileArray[i]返回正确的数字,但是当我使用lineArray[j].length时,由于某些原因,答案总是1。我在Javascript中检查了很多其他2D数组的源代码,这种检查2D数组长度的方法对它们总是有效的
请帮忙,我知道这可能只是我犯的一些愚蠢的错误。也许你可以忽略这个问题。如果console.logfileArray[i]确实给出了正确的数字,那么您可以在下面的for语句中使用它:
for(var k = 0; k < lineArray[i]-1; k++, i++) {
lineArray[j][k] = fileArray[i];
}
-1,因为您预先使用i++将其递增。
或者在递增之前声明一个新的var,并在for语句中使用它。
这可能是一种懒惰的作弊方法,但您的代码可能会按预期工作。我是个白痴,没有将字符串转换为整数。因此,我将数组的长度设置为字符串3,字符串3的长度为1,而不是3。解决办法是改变
lineArray[j] = new Array(fileArray[i]);
到
我是个白痴,没有把字符串转换成整数。因此,我将数组的长度设置为字符串3,字符串3的长度为1,而不是3。
lineArray[j] = new Array(parseInt(fileArray[i], 10));