Показать сообщение отдельно
  #1 (permalink)  
Старый 23.06.2019, 13:18
Новичок на форуме
Отправить личное сообщение для iBoolat Посмотреть профиль Найти все сообщения от iBoolat
 
Регистрация: 23.06.2019
Сообщений: 6

Рекурсивный вывод свойств объекта.
Кто-нибудь шарит ООП?
Начал изучать на JS, но столкнулся со следующей проблемой:
Задача такая: надо перебрать все свойства объекта и вывести их в консоли. Причем вложенные свойства тоже надо выводить. Решил сделать это с помощью рекурсивной функции, но внутри функции саму себя вывести не могу. Вроде бы по коду все правильно, он даже компилируется. Сравнивал с другими примерами рекурсивных функций - все логично.
Вот мой код:

var obj = { // тут тупо задаю какой-то объект, не стоит особо вчитываться. 
a: 3,
b: 2,
c: {
d: 1,
e: 2,
f: {
g: 1,
h: 2
}
},
i: {
j: 1,
k: 1
},
l: 1,
m: {
n: 1,
o: 2,
p: 3,
r: {
s: 1,
t: 2
},
u:1
},
v:1,
w:1,
x: {
y:{
z:1
}
}
}

function recursion(obj) { // вот тут уже пошла сама функция, в ней и проблема. 
for (let item in obj) {
if (typeof item === 'object') {
console.log('Here is an object!'); // если я вошел в тело условного оператора, то увижу это по выводу консоли. но в консоли ничего не выводится :( 
recursion(item);
}
else {
console.log(item);
}
}
}
console.log(typeof obj.c) //тут решил проверить, вообще является ли свойство c вложенным объектом. является. В консоль выводит
recursion(obj);


Вывод программы - только свойства первого уровня. Свойства вложенных объектов не выводятся.
В принципе вся ситуация достаточно простая, но я не захожу в тело первого условного оператора, когда проверяю объект(специально включил в код вывод в консоль, чтобы проверять этот факт). При чем как вы можете видеть, я перед вызовом функции специально сделал вывод типа вложенного объекта, и он выводит 'object'. Но в иф не входит Может проблема кодировки? может, набранный мной в коде стринг 'object' как-то иначе закодирован, чем тот, который ждет компилятор? (прогаю на маке). Компилировал на плейкод и в контесте, по которому учусь. везде одна и та же проблема.

Последний раз редактировалось iBoolat, 23.06.2019 в 13:29.
Ответить с цитированием