我想读一些文本,由三行逗号分隔的数字和每行一个三元组组成一个2D数组。我事先不知道阵列的尺寸是多少。我使用以下代码。
// Read data into a matrix
var inputData = [[]];
while (allTextLines.length>0) {
dataRecord=allTextLines.shift();
entries = dataRecord.split(',');
var xCoord=parseInt(entries.shift());
var yCoord=parseInt(entries.shift());
var zCoord=parseInt(entries.shift());
if (yCoord>=inputData.length) inputData[yCoord]=[];
inputData[yCoord][xCoord]=zCoord;
}
这导致
TypeError: can't convert undefined to object
当我尝试拨打时,来自Firebug的
if (yCoord>=inputData.length) inputData[yCoord]=[];
或
inputData[yCoord][xCoord]=zCoord;
我认为可以通过为高于当前大小的索引赋值来动态调整JavaScript数组的大小。
答案 0 :(得分:4)
它们可以动态调整(如果存在)。在JavaScript中没有2D数组这样的东西。您在初始化中创建的是一维数组,第一个元素中包含数组。
您需要做的就是在第二维中添加内容之前检查第一个维度。你现在几乎要这样做,所以这是一个小小的改变:
if (inputData[yCoord] == null) inputData[yuCoord] = [];
你必须这样做,而不是只检查长度,因为,如果“yCoord”最初为3,那么在初始化位置3后,位置0,1和2仍然为空。随后,“yCoord”值为2将无法通过长度检查,但插槽仍然是空的。
或者,您可以这样做:
for (var yplus = inputData.length; yplus <= yCoord; inputData[yplus++] = []);