我正在努力抓取部分,我正在很好地获取数据,但是当我迭代数组并尝试获取数据时 TypeError:无法读取未定义的属性“3”
我的代码是:
$('table#blob1 tr.insRow').filter(function(){
var data = $(this);
i = i + 1;
bow_arr[i] = new Array(6);
bow_arr[i][1] = data.children(1).text();
bow_arr[i][2] = data.children(2).text();
bow_arr[i][3] = data.children(3).text();
bow_arr[i][4] = data.children(4).text();
bow_arr[i][5] = data.children(5).text();
bow_arr[i][6] = data.children(6).text();
})
这里我创建了二维数组并将数据插入其中。并且我能够正确地获取所有子值,并且我已将所有这些数据插入到二维数组中。
过滤器功能运行5次,因为它遇到了5次。
for(i=0;i<1;i++){
console.log(bow_arr[i][3]+" - "+bow_arr[i][4]);
}
上面的代码我只是试图打印值,但我得到像这样的TypeError。 TypeError:无法读取未定义的属性“3”
答案 0 :(得分:2)
根据您的代码,您的迭代器循环以错误的方式写入。
在您的代码中
i = i + 1;
这使你的数组看起来像这样:
bow_arr[0] === undefined; // equals true
bow_arr[1] === [ 'text from child 1', 'text from child 2' ... ]
bow_arr[2] === [ 'text from child 1', 'text from child 2' ... ]
你的迭代器
for(i=0;i<1;i++) { ... }
只会一次迭代0
。
你有两种可能性。修复代码或修复迭代器
我选择修复你的迭代器,它应该是:
for(i=1;i<bow_arr.length;i++){
console.log(bow_arr[i][3]+" - "+bow_arr[i][4]);
}
只是为了确保您还可以检查数组中的此项是否未定义。
for(i=1;i<bow_arr.length;i++) {
if ( !bow_arr[i] || !bow_arr[i][3] || !bow_arr[i][4] ) continue;
console.log(bow_arr[i][3]+" - "+bow_arr[i][4]);
}
答案 1 :(得分:1)
正如VisioN所说,你正在索引0,但你没有在该帖子中输入任何内容。启动我为0,你应该没事:)。将增量移动到过滤器功能的末尾。
var i = 0;
$('table#blob1 tr.insRow').filter(function(){
var data = $(this);
bow_arr[i] = new Array(6);
bow_arr[i][1] = data.children(1).text();
bow_arr[i][2] = data.children(2).text();
bow_arr[i][3] = data.children(3).text();
bow_arr[i][4] = data.children(4).text();
bow_arr[i][5] = data.children(5).text();
bow_arr[i][6] = data.children(6).text();
i = i + 1;
})
Fyi:你在下面的代码中循环ONCE =有一个循环有什么意义? :)
for(i=0;i<1;i++){
console.log(bow_arr[i][3]+" - "+bow_arr[i][4]);
}