하위 객체가 존재하는지 체크 없이 가져오기 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

JavaScript | 하위 객체가 존재하는지 체크 없이 가져오기

본문

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개

등록된 댓글이 없습니다.

Menu