动态调整2D数组大小时,“TypeError:无法将undefined转换为object”

时间:2013-08-07 17:19:40

标签: javascript

我想读一些文本,由三行逗号分隔的数字和每行一个三元组组成一个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数组的大小。

1 个答案:

答案 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++] = []);