a 객체 하위 b 객체 하위 c 객체가 존재 하는지 체크하려고 할때,
만약에 b 객체도 존재하지 않으면 아래 구문은 에러가 발생한다.
[code]
if (a.b.c !== undefined) {
…
}
[/code]
에러를 해결하기 위해서는 아래처럼 일일이 검색해야 한다.
[code]
if (a !== undefined && a.b !== undefined && a.b.c !== undefined) {
…
}
[/code]
너무 번거롭다.
그래서 한번에 체크할 수 있는 함수를 만들었다.
[code]
function getObject(obj, rest) {
if (obj === undefined) return undefined
rest = rest.split(‘.’)
const level = rest.shift()
if (rest.length === 0) {
const mat = level.match(/(.+)\[([^\]+]+)\]$/i)
if (mat && mat.length === 3) {
mat[2] = mat[2].replace(/[‘”]/g, ”)
return obj[mat[1]][mat[2]]
} else if (obj.hasOwnProperty(level)) {
return obj[level]
}
}
rest = rest.join(‘.’)
return getObject(obj[level], rest)
}
[/code]
사용법
[code]
const obj = {
a: {
aa: {
aaa: [
‘AAA’
]
},
bb: ‘BB’
}
}
console.log(getObject(obj, ‘a.aa’))
console.log(getObject(obj, ‘a.aa.aaa’))
console.log(getObject(obj, ‘a.aa.aaa[0]’))
console.log(getObject(obj, “a[‘bb’]”))
console.log(getObject(obj, ‘a.aa.aab’))
// 출력결과
{ aaa: [ ‘AAA’ ] }
[ ‘AAA’ ]
AAA
BB
undefined
[/code]