Это будет очень простой вопрос для всех вас, javascript/jquery.
Я программировал javascript за последние 2 года, и сегодня у меня возникла странная проблема.
Я извлекаю JSONarray из моего C# Webmethod
и называя его jQuery.ajax()
Когда я делаю
for (i in JSONRaw) {
Index = Index + 1;
$('#bottomGridDashboard').append('<tr> <td>' + Index + '</td> <td>' + JSONRaw[i].DisplayName + '</td> <td>' + JSONRaw[i].SpeedInKPH + '</td> <td><img src="' + JSONRaw[i].ImageURL + '" height="20px" alt="" /></td> <td>' + JSONRaw[i].DepotID + '</td> <td>' + JSONRaw[i].RouteID + '/' + JSONRaw[i].ScheduleID + '/' + JSONRaw[i].TripID + '</td> <td>' + JSONRaw[i].Direction + '</td> <td>' + JSONRaw[i].LastStop + '</td> <td> ' + JSONRaw[i].ETAMinutes + ' </td> </tr>');
}
добавленная таблица добавляет две дополнительные строки, которые помещают каждое поле как "undefined". Посмотрите это изображение
Однако, если я заменил цикл на
for (var i = 0; i < JSONRaw.length;i++ ) {
Index = Index + 1;
$('#bottomGridDashboard').append('<tr> <td>' + Index + '</td> <td>' + JSONRaw[i].DisplayName + '</td> <td>' + JSONRaw[i].SpeedInKPH + '</td> <td><img src="' + JSONRaw[i].ImageURL + '" height="20px" alt="" /></td> <td>' + JSONRaw[i].DepotID + '</td> <td>' + JSONRaw[i].RouteID + '/' + JSONRaw[i].ScheduleID + '/' + JSONRaw[i].TripID + '</td> <td>' + JSONRaw[i].Direction + '</td> <td>' + JSONRaw[i].LastStop + '</td> <td> ' + JSONRaw[i].ETAMinutes + ' </td> </tr>');
}
строки undefined исчезают.. Смотрите изображение
Я извиняюсь за свою глупость, но раньше я никогда не сталкивался с такой проблемой. В чем может быть причина?
EDIT:
Массив отлично. И в нем нет дыр. Другое замечание состоит в том, что свойства undefined появляются только в нижней части моей сетки. Я думаю, что он обрабатывает два дополнительных индекса больше, чем длина массива.
РЕДАКТИРОВАТЬ-2
Мой console.log показал мне следующие элементы в моем массиве.
http://i.imgur.com/rI5TjdK.jpg
Я объявил прототипы на моей главной странице.
Array.prototype.inArray = function (comparer) {
for (var i = 0; i < this.length; i++) {
if (comparer(this[i])) return true;
}
return false;
};
Array.prototype.pushIfNotExist = function (element, comparer) {
if (!this.inArray(comparer)) {
this.unshift(element);
}
};
Увеличивает ли длина массива.?