Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Число свойств в объекте и избавление от паравозов (https://javascript.ru/forum/misc/26670-chislo-svojjstv-v-obekte-i-izbavlenie-ot-paravozov.html)

kidar2 17.03.2012 16:07

Число свойств в объекте и избавление от паравозов
 
Добрый день.
Есть два небольших вопроса:

1. Как можно узнать число свойств и методов в js объекте? Как собственных, так и тех которые идут в прототипах. Только чтобы без цикла for in по этому объекту.

2. Есть некоторый объект, у него есть вложенные свойства:
a.b.c.d.e

Как можно компактно и быстро получить значение свойства "e", если может быть пустым любой из "вагонов" этого паровоза, причём длина паровоза может быть произвольной.

Кто нибудь решал эту задачу, кроме прохода по вагонам циклом, рекурсией или банальным try catch ?

monolithed 17.03.2012 16:40

Цитата:

Сообщение от kidar2
Только чтобы без цикла for in по этому объекту.

никак

karmis 17.03.2012 17:17

1)
http://jquery-docs.ru/Core/size/

2)
сам мучаюсь. Сделал сначала replace всех пустых, затем просто find
$(document).find('table');

monolithed 17.03.2012 17:53

Если нужно подсчитать количество всех дочерних элементов, то сперва определите родительский элемент, затем обойдите рекурсивно все ноды с помощью методов childNodes или children[]

kidar2 17.03.2012 19:10

Речь не про dom дерево.
Речь про произвольный js объект, например такой
a = {a: 123, b : 321 }

DreamTheater 17.03.2012 19:14

Цитата:

Сообщение от kidar2 (Сообщение 163686)
Речь не про dom дерево.
Речь про произвольный js объект, например такой
a = {a: 123, b : 321 }

var object = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: 6,
    g: 7,
    h: 8,
    i: 9,
    j: 10
};

alert(Object.keys(object).length);

monolithed 17.03.2012 19:17

DreamTheater,
вложенные ветки все равно рекурсивно обходить придется

DreamTheater 17.03.2012 19:51

Цитата:

Сообщение от monolithed (Сообщение 163689)
DreamTheater,
вложенные ветки все равно рекурсивно обходить придется

Ошибся, ему ведь нужно считать свойства объекта и его прототипа, то есть нужно юзать getOwnPropertyNames вместо keys, а про вложенность он ничего не говорил.

kidar2 17.03.2012 20:08

Спасибо. То что нужно.
Ещё бы вторую задачу решить :)

kidar2 17.03.2012 20:39

Object.getOwnPropertyNames, Object.keys - оказывается этих методов нет в IE8-. Печально.


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