昔は underscore や lodash などを使って配列やオブジェクトを扱っていたけど、
最近はネイティブで色々と便利なメソッドが用意されてきたので、
Vanilla JS で Object を forEach を使って参照してみる。
サンプルコード
Object 型は forEach() を持っていないので注意。
Object.keys() を使うとオブジェクトのキーを配列で取得できる。
ただし、配列で取得できるのは最初の階層だけなので、
オブジェクトの中にあるオブジェクトは取得できない。
const obj = {
id: 0,
name: 'psychedelic nekopunch',
address: 'Tokyo',
sex: 'male',
marks: {
japanese: 'D',
science: 'C',
math: 'A',
physical: 'A',
english: {
reading: 'B',
writing: 'C',
speaking: 'A',
}
},
}
const keys = Object.keys(obj)
keys.forEach((key) => {
console.log(`${key}: ${obj[key]}`)
// id: 1
// name: psychedelic nekopunch
// address: Tokyo
// sex: male
// marks: [object Object]
})
// 再帰的に取得する
function reflexiveCall(obj, nest) {
const keys = Object.keys(obj)
keys.forEach((key) => {
if (typeof obj[key] == 'object') {
if (nest) {
reflexiveCall(obj[key], `${nest}${key}.`)
} else {
reflexiveCall(obj[key], `${key}.`)
}
return
}
if (nest) {
console.log(`${nest}${key}: ${obj[key]}`)
} else {
console.log(`${key}: ${obj[key]}`)
}
// id: 1
// name. psychedelic nekopunch
// address: Tokyo
// sex: male
// marks.japanese: D
// marks.science: C
// marks.math: A
// marks.physical: A
// marks.english.reading: B
// marks.english.writing: C
// marks.english.speaking: A
})
}
reflexiveCall(obj, '')