Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2012, 16:07
Аспирант
Отправить личное сообщение для kidar2 Посмотреть профиль Найти все сообщения от kidar2
 
Регистрация: 05.01.2010
Сообщений: 64

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

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

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

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

Кто нибудь решал эту задачу, кроме прохода по вагонам циклом, рекурсией или банальным try catch ?
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2012, 16:40
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от kidar2
Только чтобы без цикла for in по этому объекту.
никак
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2012, 17:17
Аспирант
Отправить личное сообщение для karmis Посмотреть профиль Найти все сообщения от karmis
 
Регистрация: 25.06.2011
Сообщений: 44

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

2)
сам мучаюсь. Сделал сначала replace всех пустых, затем просто find
$(document).find('table');
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2012, 17:53
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Если нужно подсчитать количество всех дочерних элементов, то сперва определите родительский элемент, затем обойдите рекурсивно все ноды с помощью методов childNodes или children[]
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2012, 19:10
Аспирант
Отправить личное сообщение для kidar2 Посмотреть профиль Найти все сообщения от kidar2
 
Регистрация: 05.01.2010
Сообщений: 64

Речь не про dom дерево.
Речь про произвольный js объект, например такой
a = {a: 123, b : 321 }
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2012, 19:14
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сообщение от kidar2 Посмотреть сообщение
Речь не про 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);
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2012, 19:17
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

DreamTheater,
вложенные ветки все равно рекурсивно обходить придется
Ответить с цитированием
  #8 (permalink)  
Старый 17.03.2012, 19:51
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Сообщение от monolithed Посмотреть сообщение
DreamTheater,
вложенные ветки все равно рекурсивно обходить придется
Ошибся, ему ведь нужно считать свойства объекта и его прототипа, то есть нужно юзать getOwnPropertyNames вместо keys, а про вложенность он ничего не говорил.
Ответить с цитированием
  #9 (permalink)  
Старый 17.03.2012, 20:08
Аспирант
Отправить личное сообщение для kidar2 Посмотреть профиль Найти все сообщения от kidar2
 
Регистрация: 05.01.2010
Сообщений: 64

Спасибо. То что нужно.
Ещё бы вторую задачу решить
Ответить с цитированием
  #10 (permalink)  
Старый 17.03.2012, 20:39
Аспирант
Отправить личное сообщение для kidar2 Посмотреть профиль Найти все сообщения от kidar2
 
Регистрация: 05.01.2010
Сообщений: 64

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск