Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JSON и подсчет количества элементов (https://javascript.ru/forum/misc/34569-json-i-podschet-kolichestva-ehlementov.html)

KupueIIIKo 10.01.2013 15:05

JSON и подсчет количества элементов
 
Суть такова принял JSON
Код:

user
*** 0
****** id
****** st

*** 1
****** id
****** st

Принимаю через jquery с указанием формата JSON
Получается объект!
Теперь надо подсчитать сколько элементов в user)
Количество постоянно меняется!
data.user.leght - не работает! Наверно потому, что я получил объект)
Как посчитать?)

KupueIIIKo 10.01.2013 15:08

есть вариант такой
while(data.user[i])
					{
						i++;
					}
				alert(i-1);

Кто нить лучше предложит?)

monolithed 10.01.2013 15:12

Цитата:

Сообщение от KupueIIIKo
есть вариант такой

Нельзя так итерироваться по объекту!
Цитата:

Сообщение от KupueIIIKo
Кто нить лучше предложит?)

alert(Object.keys({foo: 1, bar: 2}).length);

Полифил, если нужен:
if (!Object.keys) {
	Object.keys = function(object) {
		var result = []
		    __own__ = Object.prototype.hasOwnProperty;

		for (var key in object) {
			if (__own__.call(object, key))
				result.push(key);
		}
		return result;
	};
}

devote 10.01.2013 15:29

Цитата:

Сообщение от monolithed
Полифил, если нужен:

а более идеальным не считать ключи, а посылать с сервера не объект а массив.

PHP метод json_encode, вполне нормально массив превращает в массив а не в объект с хешами, но массив не должен содержать хеш ключи, лишь только номера по порядку:
$data = array(
    "user" => array(
        // массив с ключем 0
        array(
            'id' => 1,
            'name' => "vasya",
        ),
        // массив с ключем 1
        array(
            'id' => 2,
            'name' => "petya",
        ),
        // и т.д.
    )
);

echo json_encode( $data );

далее в JS будет доступно:
data.user.length

Deff 10.01.2013 15:31

:) Имхо идеальный вариант Нулевой ключ с массивом всех ключей в объекте и далее ключи значения

KupueIIIKo 10.01.2013 15:32

А серавно придется через while
Сказали посчитать сколько st имеет значение например 12

KupueIIIKo 10.01.2013 15:33

while(data.user[i])
					{
						if(data.user[i].st==12)
							{
								vq++;
							}
						i++;
					}

monolithed 10.01.2013 16:14

Цитата:

Сообщение от KupueIIIKo
while(data.user[i])

инструкция while только для массивов

Цитата:

Сообщение от KupueIIIKo
Сказали посчитать сколько st имеет значение например 12

[1, 1, 2, 3, 1].filter(function(item) {
   return item == 1;
}).length; // 3


Часовой пояс GMT +3, время: 18:25.