Подскажите как вывести все свойства объекта?
Есть объект
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, время: 06:38. |