今日必要になったので。
とりあえず以下でできました↓
const nestViewer = (obj, prefix = '') => {
for (const key in obj) {
if (typeof obj[key] == 'object') {
if (Array.isArray(obj[key])) {
obj[key].forEach((item, index) => {
if (typeof item != 'object') {
console.log({ key: `${prefix && prefix + '.'}${key}[${index}]`, value: item })
} else {
nestViewer(item, `${prefix && prefix + '.'}${key}[${index}]`)
}
})
} else {
nestViewer(obj[key], `${prefix && prefix + '.'}${key}`)
}
} else {
console.log({ key: `${prefix && prefix + '.'}${key}`, value: obj[key] })
}
}
}
こんな感じの地獄のようなObjectがあったとして
{
"a": 1,
"b": [4, 5, 6],
"c": {
"a": 7,
"b": [8, 9, 10],
"c": {
"a": 11,
"b": [12, 13, 14],
"c": {
"a": 15,
"b": [16, 17, 18],
"c": {
"a": 19,
"b": [20, 21, 22],
"c": {
"a": 23,
"b": [24, 25, 26],
"c": {}
}
}
}
}
},
"d": [
{
"a": 7,
"b": [8, 9, 10],
"c": {
"a": 11,
"b": [12, 13, 14],
"c": {}
}
}
]
}
実行結果
{key: "a", value: 1}
{key: "b[0]", value: 4}
{key: "b[1]", value: 5}
{key: "b[2]", value: 6}
{key: "c.a", value: 7}
{key: "c.b[0]", value: 8}
{key: "c.b[1]", value: 9}
{key: "c.b[2]", value: 10}
{key: "c.c.a", value: 11}
{key: "c.c.b[0]", value: 12}
{key: "c.c.b[1]", value: 13}
{key: "c.c.b[2]", value: 14}
{key: "c.c.c.a", value: 15}
{key: "c.c.c.b[0]", value: 16}
{key: "c.c.c.b[1]", value: 17}
{key: "c.c.c.b[2]", value: 18}
{key: "c.c.c.c.a", value: 19}
{key: "c.c.c.c.b[0]", value: 20}
{key: "c.c.c.c.b[1]", value: 21}
{key: "c.c.c.c.b[2]", value: 22}
{key: "c.c.c.c.c.a", value: 23}
{key: "c.c.c.c.c.b[0]", value: 24}
{key: "c.c.c.c.c.b[1]", value: 25}
{key: "c.c.c.c.c.b[2]", value: 26}
{key: "d[0].a", value: 7}
{key: "d[0].b[0]", value: 8}
{key: "d[0].b[1]", value: 9}
{key: "d[0].b[2]", value: 10}
{key: "d[0].c.a", value: 11}
{key: "d[0].c.b[0]", value: 12}
{key: "d[0].c.b[1]", value: 13}
{key: "d[0].c.b[2]", value: 14}
以上