Как пройтись одним циклом в многоуровневом объекте?
Как пройтись одним циклом в многоуровневом объекте?
Прошу прощения за рандомный набор букв в названии переменных в let.
А как правильно и эстетично именовать такие переменные в многоуровневых циклах?
let obj = {
0: {
0: {
0: {
0: {
0: {
id: 11,
decimal: 3
},
// еще значения...
},
// еще значения...
},
// еще значения...
},
// еще значения...
},
// еще значения...
};
for (let i in obj) {
for (let j in obj[i]) {
for (let y in obj[i][j]) {
for (let a in obj[i][j][y]) {
for (let n in obj[i][j][y][a]) {
console.log(obj[i][j][y][a][n].id, obj[i][j][y][a][n].decimal);
}
}
}
}
}
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Для обхода многомерного объекта с одинаковой структурой данных, воспользуемся рекурсией.
Создадим функцию, которая будет вызывать сама себя, если структура объекта ниже не содержит заданных нам значений
let obj = {
0: {
0: {
0: {
0: {
0: {
id: 11,
decimal: 3
},
},
},
1: {
id: 12,
decimal: 4
},
},
},
1: {
id: 14,
decimal: 5
},
};
const logObj = (data) => {
for (let i in data) {
if (typeof data[i] === 'object' && !data[i].id) {
logObj(data[i]);
} else {
console.log(data[i].id, data[i].decimal)
}
}
}
logObj(obj);
Если структура сложнее, то можно добавить дополнительные проверки