"类型错误:can't将未定义转换为对象“t”;当动态调整2D阵列的大小时

"TypeError: can't convert undefined to object" when Dynamically Resizing 2D Array

本文关键字:动态 调整 2D 小时 阵列 转换 错误 类型 quot can 未定义      更新时间:2023-09-26

我想将一些文本读取到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数组的大小。

当它们存在时,可以动态调整它们的大小。JavaScript中没有2D数组。您在初始化中创建的是一个1D数组,第一个元素中有一个数组。

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

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

你必须这样做,而不仅仅是检查长度,因为如果"yCoord"最初是3,那么在初始化位置3后,位置0、1和2仍然为空。随后,值为2的"yCoord"将无法通过长度检查,但插槽仍然是空的。

或者,你可以这样做:

for (var yplus = inputData.length; yplus <= yCoord; inputData[yplus++] = []);