Когда я разбираю этот объект с помощью приведенной ниже функции, первое значение, которое я получаю в таблице, «неопределено». Любая идея, почему это может произойти? Я неправильно разбираюсь? Должен ли я использовать другой цикл?Первое значение возвращает «undefined» при анализе следующим образом:
var students = [
{
fn : "Stone",
ln : "Carpenter",
scores : [61,99,73,68,80,62,176,78]
},
{
fn : "Samson",
ln : "Sears",
scores : [68,193,91,190,95,65,171,75]
},
{
fn : "Quin",
ln : "Morton",
scores : [79,95,161,92,182,163,198,182]
},
{
fn : "Qunitessa",
ln : "Hardy",
scores : [99,65,75,69,77,67,86,78]
},
{
fn : "Ashley",
ln : "England",
scores : [147,70,81,64,148,71,70,63]
},
{
fn : "Thaddeus",
ln : "Hutchinson",
scores : [99,190,188,185,160,88,89,76]
},
{
fn : "Yeo",
ln : "Hayes",
scores : [88,64,199,165,198,76,74,81]
},
{
fn : "Rylee",
ln : "Larson",
scores : [71,126,63,71,168,173,175,88]
}
];
function updateTable(obj) {
var rows,
len;
len = obj.length;
rows = "<table>"
rows += "<tbody>"
for (var i in obj) {
var scoreLen,
score,
sum;
scoreLen = obj[i].scores.length;
scores = obj[i].scores;
rows += "<tr>"
rows += "<td>" + obj[i].fn + "</td>"
rows += "<td>" + obj[i].ln + "</td>"
for(j=0; j<scoreLen; j+=1) {
rows += "<td>" + scores[j] + "</td>"
}
rows += "<td>" + arraySum(obj[i].scores) + "</td>"
rows += "</tr>"
}
document.getElementsByTagName('body')[0].innerHTML = rows
console.log(rows)
}
Вот [переписывание кода] (HTTP://jsfiddle.net/C38ny/) с использованием методов DOM для создания элементов вместо конкатенации строк и 'innerHTML'. –
Я понимаю, что конкатенация строк и innnerHTML плохи? :) – jjhenry
У меня есть сильная личная предвзятость в пользу использования методов DOM при работе в DOM. На мой взгляд, разметка принадлежит на сервере. Как только разметка прибыла и была переведена в DOM, нужно взаимодействовать с ней как DOM. Это не означает, что нет места для некоторой де-нормализации с использованием 'innerHTML', но я лично предпочитаю свести его к минимуму. * (Опять же, это мое личное предубеждение.) * –