【问题标题】:Cannot set property '0' of 2D array无法设置二维数组的属性“0”
【发布时间】:2013-07-08 19:20:08
【问题描述】:

谁能告诉我为什么下面的代码会出现这个错误:

未捕获的类型错误:无法设置未定义的属性“0”

var vehicles = [];
$.get('../poll/index.php?data=vehicles', function(data) {

    var rows = $(data).find('row').length;
    for (var i = 0; i < rows; i++) {
        vehicles[i][0] = $(data).find('row').eq(i).find('stage').text();
        vehicles[i][1] = $(data).find('row').eq(i).find('direction').text();
        vehicles[i][2] = $(data).find('row').eq(i).find('stageName').text();
        vehicles[i][3] = $(data).find('row').eq(i).find('atco').text();
        vehicles[i][4] = $(data).find('row').eq(i).find('service').text();
        vehicles[i][5] = $(data).find('row').eq(i).find('journey').text();
        vehicles[i][6] = $(data).find('row').eq(i).find('fleet').text();
        vehicles[i][7] = $(data).find('row').eq(i).find('longitude').text();
        vehicles[i][8] = $(data).find('row').eq(i).find('latitude').text();
        vehicles[i][9] = $(data).find('row').eq(i).find('operator').text();
        vehicles[i][10] = $(data).find('row').eq(i).find('position').text();
    }

}, 'xml');

【问题讨论】:

  • vehicles[i] 未定义。先定义吧。
  • 因为“vehicles”数组是空的,我猜是...
  • 旁注:您的代码效率极低。您应该将$(data).find('row')$(data).find('row').eq(i) 存储在变量中,这样您就不会执行太多不必要的DOM 查询。
  • 谢谢安迪,我知道这很糟糕,我只是为了测试目的而这样做。 :)
  • 只要你知道... ;-)

标签: javascript jquery arrays


【解决方案1】:

你需要定义每个子数组,例如

var vehicles = []; // parent array;
vehicles[0] = []; // first child array;

所以你需要:

for (var i = 0; i < rows; i++) {
     var vehicles[i] = [];
     ... rest of code here ...
}

【讨论】:

  • 啊。我现在觉得很愚蠢,这是漫长的一天,哈哈。非常感谢 :) - 计时器到时会接受您的回答。
【解决方案2】:

vehicles[i] 没有分配任何值。

添加一行:

vehicles[i] = [];

在循环的顶部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多