JavaScript | 하위 객체가 존재하는지 체크 없이 가져오기
페이지 정보
- 작성자:
- 핵탐
- 작성일
- 07.14 13:44
- 조회
- 2,919
- 댓글
- 0
본문
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]
댓글 0개
등록된 댓글이 없습니다.