Javascript: array.length возвращает undefined
У меня есть набор данных, передаваемый функцией PHP json_encode
. Я использую функцию jQuery getJSON
для ее декодирования:
$.getJSON("url", function (data) {
console.log(data);
});
Результат выглядит следующим образом в консоли:
Object {1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object, 8: Object, 9: Object, 10: Object}
Я могу получить доступ к каждому массиву с помощью data[1]
, data[2]
и т.д., но чтобы упростить это, я подумал о том, что цикл зациклился, поэтому я могу получить доступ ко всем сразу:
$.getJSON("url", function (data) {
for (var i = 0, len = data.length; i < len; i++) {
//do something
}
});
Однако я не могу заставить это работать, потому что data.length
возвращает значение undefined
. Что не так и как я могу это исправить?
Ответы
Ответ 1
Объекты не имеют свойства .length
.
Простое решение, если вы знаете, что вам не нужно беспокоиться о проверках hasOwnProperty
, должно было бы сделать это:
Object.keys(data).length;
Если вам нужно поддерживать IE 8 или ниже, вам придется использовать цикл, вместо этого:
var length= 0;
for(var key in data) {
if(data.hasOwnProperty(key)){
length++;
}
}
Ответ 2
Один из вариантов:
Object.keys(myObject).length
К сожалению, это не работает в старых версиях IE (до 9).
Если вам нужна эта совместимость, используйте мучительную версию:
var key, count = 0;
for(key in myObject) {
if(myObject.hasOwnProperty(key)) {
count++;
}
}
Ответ 3
Похоже, что это не массив, а произвольный объект. Если у вас есть контроль над сериализацией PHP, вы можете изменить это.
Как raina77ow указал, один из способов сделать это в PHP будет заменено что-то вроде этого:
json_encode($something)
с чем-то вроде:
json_encode(array_values($something))
Но не игнорируйте другие ответы здесь о Object.keys
. Они также должны выполнить то, что вы хотите, если у вас нет возможности или желания изменить сериализацию вашего объекта.
Ответ 4
попробуйте это
Object.keys(data).length
Если IE < 9, вы можете прокручивать объект самостоятельно с помощью цикла цикла
var len = 0;
var i;
for (i in data) {
if (data.hasOwnProperty(i)) {
len++;
}
}