Подскажите как вывести все свойства объекта?
Есть объект
obj = {ob : "param 1", more : {ob : "param 2", more: {ob : "param 3", more : {ob: param: "param 3", more: "stop" }}}}; как мне его перебрать чтобы получить массив всех ob и массив всех more ? пожалуйста подскажите! |
|
Цитата:
http://javascript.ru/typeof |
ksa, да я понимаю как это сделать для свойств верхнего уровня, а как перебрать вложенные объекты? подскажи пожалуйста! :)
|
Цитата:
2. Если объект - перебрать его как любой объект. Про рекурсию слышал? :) Так вот это как раз её случай. ;) |
Цитата:
|
это типа сигнал "хватит переберать" :)
PS. про рекурсию щас почитаю, спасибо. |
Цитата:
|
Цитата:
Нипанятна... :cray: |
function parseOb (ob) { for(var key in ob) { var massVal = [] var massMore = [] massVal.push(key) massMore.push(ob[key]) if (ob[key] instanceof Object) { parseOb(ob) } } } var obj = {val: 1, more: { val: 2, more: { val: 3, more: { val: 4, more: 0 } } } }; parseOb(obj); ругается Uncaught RangeError: Maximum call stack size exceeded ЗЫ, мне нужно понять если следущий more объект то взять его имя (val) и так пока незакончатся все more (следуя вашему совету поменял "stop" на 0) |
я запутался и вас запутал, извините. это совсем не то что мне надо :)
|
Цитата:
Как вариант obj = { ob : "param 1", more : { ob : "param 2", more: { ob : "param 3", more : { ob: "param 4", more: 0 } } } }; var aVal = []; parseOb(obj); alert(aVal); function parseOb (Obj) { aVal[aVal.length]=Obj['ob'] if (typeof(Obj['more'])=='object') { parseOb(Obj['more']) } }; |
Чтоб избежать проблем рекурсией объекта - просто надо вести доп массив объектов и при рекурсивном вызове проверять не было ли такого объекта прежде, и если оный есть - вставлять заглушку про рекурсию или ссылку на оный.(в зависимости от выводимой структуры). Ничего запредельно сложного. Меня если четно напрягает почему JSON.stringify не делает так, а плюёт ошибкой.
|
Aetae, и как по-твоему должна выглядеть ссылка в json?
|
В json наверное просто игнорировать, просто ворнинг пулять.)
Но да ты прав, я погорячился.) |
Вот делюсь примером, как я просматриваю объект!
var a={}; a.key=3; a.super=6; a.a=1; a.ooo={}; a.ooo.w=1; a.ooo.d='ss'; a.ooo.kk={}; a.ooo.kk.eee=12; a.sss='ddfdsf'; glu=0; //glubina delta=''; deltastep=' '; function showobj(obj,oname){ if(typeof(obj)=='object'){ showobj_t+='\n'+delta+oname+' {'; glu++; delta=''; for(g=0;g<glu;g++){ delta+=deltastep; } for(i in obj){ if( obj[i] == '[object Object]' ){ showobj(obj[i],oname+'.'+i); } showobj_t+='\n'+delta+oname+'.'+i; showobj_t+=' = '+obj[i]; } glu--; delta=''; for(g=0;g<glu;g++){ delta+=deltastep; } showobj_t+='\n'+delta+'}'; }else{ alert('noT!'); } } var showobj_t=''; //итоговый текст showobj(a,'a'); alert(showobj_t); |
anton-line,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
примечания:
1) deltastep=' '; //тут пробел.. можно поставить 3 пробела для наглядности 2) oname (второй параметр к функции) - тоже только для наглядности 3) проверка "является ли объектом" сделана так: obj[i] == '[object Object]' потому что "typeof(obj)=='object'" что-то не сработала.. но можете подправить =) =) пользуйтесь =) |
Часовой пояс GMT +3, время: 21:42. |