Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2016, 18:50
Аспирант
Отправить личное сообщение для Sherminator Посмотреть профиль Найти все сообщения от Sherminator
 
Регистрация: 01.08.2012
Сообщений: 50

Разобрать объект - поле -> div (или ul)
Есть большой объект, например

var user = {
  name: "Вася",
  age: 25,
  size: {
    top: 90,
    middle: 60,
    bottom: 90,
      size: {
         top: 90,
         middle: 60,
         bottom: 90,
            size: {
               top: 90,
               middle: 60,
               bottom: 90
                    }
              }
        }
}



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

<div>
    <div>name: "Вася"</div>
    <div>age: 25</div>
    <div>size:
        <div>top: 90</div>
        <div>middle: 60</div>
        <div>bottom: 90</div>
        <div>size:
            <div>top: 90</div>
            <div>middle: 60</div>
            <div>bottom: 90</div>
            <div>size:
                <div>top: 90</div>
                <div>middle: 60</div>
                <div>bottom: 90</div>
            </div>
        </div>
    </div>
</div>


Набросал код, но он возвращает последнее вложение объекта. В чем косяк?
Fx.Wrap = function (obj) {
    var out = "";
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && obj[prop] != undefined) {
            if (typeof obj[prop] == 'object') {
                out += this.Wrap(obj[prop]);
                continue;
            }
            out += '<div>' + prop + ': ' + obj[prop] + '</div>';
        }
    }
    return out;
};
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2016, 18:53
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Тут нужна рекурсия. Нужен специалист, или жди когда я дотямаю.

UPD. Fx.Wrap === this.Wrap ? То есть это она и есть, рекурсия?
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2016, 19:00
Аспирант
Отправить личное сообщение для Sherminator Посмотреть профиль Найти все сообщения от Sherminator
 
Регистрация: 01.08.2012
Сообщений: 50

Сообщение от warren buffet Посмотреть сообщение
Fx.Wrap === this.Wrap ? То есть это она и есть, рекурсия?
Теоретически да) Но что то не получается она
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2016, 19:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Sherminator,
Fx.Wrap = function (obj) {
    var out = "";
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && obj[prop] != undefined) {
            var k = obj[prop];
            if (typeof k == 'object') {
                k = this.Wrap(k);
            }
            out += '<div>' + prop + ': ' + k + '</div>';
        }
    }
    return out;
};
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2016, 19:31
Аспирант
Отправить личное сообщение для Sherminator Посмотреть профиль Найти все сообщения от Sherminator
 
Регистрация: 01.08.2012
Сообщений: 50

рони, вы всего лишь создали отдельную переменную и положили туда объект, что заставило его работать... Можете объяснить в чем была проблема поподробнее?
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2016, 19:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Sherminator
Можете объяснить в чем была проблема поподробнее?
нет ... с теорией у меня никак, только практика.
Ответить с цитированием
  #7 (permalink)  
Старый 26.09.2016, 20:12
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ну хорошо.

Я один раз написал рендер деревянного меню говнокодом, год не лез в него, потом совершил подвиг, залез, переписал классово и больше не полезу. Недетерминированная это штука рендер деревьев. Все работает, а почему работает - хз. )))
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2016, 12:33
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от Sherminator
вы всего лишь создали отдельную переменную и положили туда объект, что заставило его работать... Можете объяснить в чем была проблема поподробнее?
может так понятнее?
без отдельной переменной

Fx.Wrap = function (obj) {
    var out = "";
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && obj[prop] != undefined) {
            out += '<div>' + prop + ': ' + (typeof obj[prop] == 'object' ? this.Wrap(obj[prop]) : obj[prop]) + '</div>';
        }
    }
    return out;
};
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2016, 13:28
Аспирант
Отправить личное сообщение для Sherminator Посмотреть профиль Найти все сообщения от Sherminator
 
Регистрация: 01.08.2012
Сообщений: 50

Сообщение от Pavel M.
может так понятнее?
Понял свой косяк) Всем спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить координаты курсора в текстовом поле в пикселях prike Events/DOM/Window 4 23.05.2013 04:35
Поле должно быть от 6 до 20 латинских букв или цифр Мендыбаев Игорь Элементы интерфейса 17 15.06.2010 07:49
getProperty('href') в IE - Объект не поддерживает это свойство или метод kalexi Общие вопросы Javascript 2 04.05.2010 15:13
Задача: палец > кнопка > div > to >textarea Апельсин Events/DOM/Window 12 19.03.2010 20:40
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31