2

我想将一些文本(由逗号分隔的三元组和每行一个三元组组成)读入二维数组。我事先不知道数组尺寸是多少。我使用以下代码。

        // 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 数组可以通过将值分配给高于当前大小的索引来动态调整大小。

4

1 回答 1

4

它们存在时可以动态调整大小。JavaScript 中没有二维数组这样的东西。您在初始化中创建的是一个一维数组,第一个元素中有一个数组。

您所要做的就是在第二个维度添加内容之前检查第一个维度。你现在几乎要这样做了,所以这是一个小改动:

if (inputData[yCoord] == null) inputData[yuCoord] = [];

您必须这样做,而不是只检查长度,因为如果“yCoord”最初为 3,那么在初始化位置 3 后位置 0、1 和 2 仍将为空。随后,“yCoord”值为 2 将失败你的长度检查,但插槽仍然是空的。

或者,您可以执行以下操作:

for (var yplus = inputData.length; yplus <= yCoord; inputData[yplus++] = []);
于 2013-08-07T17:21:07.910 回答