我试图让一个函数循环遍历两个表中的数据并将它们放入一个对象中。通过第一个表的第一个for循环就可以了,但是当第二个表只有1行要通过时,第二个循环通过第二个表会吐出一个空对象。 但是,当有超过1行时,则所有对象的值都为 second 行。
我真的不明白我在这里做错了什么:
function foo(){
var rows = $('#table1').find('tr');
var array1 = [];
for(var i = 1; i < rows.length-1; i++){
var row = $(rows[i]).find('input');
var o = {
name : $(row[0]).val(),
bday : $(row[1]).val(),
parent : $(row[2]).val(),
parentBDay : $(row[3]).val(),
parentNumber : $(row[4]).val()
};
array1.push(o);
}
var array2 = [];
rows = $('#table2').find('tr');
for(var j = 1; j < rows.length-1; j++){
var row = $(rows[i]).find('input');
var o = {
name : $(row[0]).val(),
bday : $(row[1]).val(),
phoneNumber : $(row[2]).val()
};
console.log('wtf: ' + JSON.stringify(o));
array2.push(o);
}
}
答案 0 :(得分:2)
您的问题是for循环中的索引没有很好地循环。你从1
开始for循环,如果你想使用第一个元素,那就错了。请注意,索引从0
开始。如果你故意错过第一个元素,因为它是标题行或其他东西,那么这不是问题。但是,结束标志,如
< rows.length - 1
显然是错误的。让我们假设,行数是50.然后它的最后一个索引是50 - 1 = 49.如果你从一个循环直到你达到50 - 1以下的数字,那么你的最后一个索引将是48,你会错过最后一个元件。您的情况应为< rows.length
或<= rows.length - 1
。