Разобрать объект - поле -> 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; }; |
Тут нужна рекурсия. Нужен специалист, или жди когда я дотямаю.
UPD. Fx.Wrap === this.Wrap ? То есть это она и есть, рекурсия? |
Цитата:
|
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; }; |
рони, вы всего лишь создали отдельную переменную и положили туда объект, что заставило его работать... Можете объяснить в чем была проблема поподробнее?
|
Цитата:
|
Ну хорошо.
Я один раз написал рендер деревянного меню говнокодом, год не лез в него, потом совершил подвиг, залез, переписал классово и больше не полезу. Недетерминированная это штука рендер деревьев. Все работает, а почему работает - хз. ))) |
Цитата:
без отдельной переменной 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; }; |
Цитата:
|
Часовой пояс GMT +3, время: 09:02. |