analogcoding

recursion 예제연습 5 본문

Study JS for me/Algorithm

recursion 예제연습 5

be well 2019. 5. 10. 17:09

json 형태의 TREE_DATA 에서 객체와 배열로 구성된 안에서, 인자로 넘기는 특정 id값을 가지고 있는 객체를 찾아 리턴.

이 때 객체는 children이라는 키 값에 자식 노드를 가질 수 있으며, recursion을 통해서 부모 뿐만이 아닌,

자식 노드 중에서도 id값을 가진 객체가 있는지를 찾아서 리턴.

 

json 구조의 TREE_DATA

var TREE_DATA = {
  "items": [
    {
      "id": "1",
      "name": "johnny"
    },
    
    {
      "id": "2",
      "name": "ingi",
      "children": [
        {
          "id": "3",
          "name": "johnson"
        },
        {
          "id": "4",
          "name": "katy"
        },
        {
          "id": "5",
          "name": "steve",
          "children": [
            {
              "id": "6",
              "name": "lisa"
            },
            {
              "id": "7",
              "name": "penny",
              "children": [
                {
                  "id": "8",
                  "name": "john"
                },
                {
                  "id": "9",
                  "name": "hoyong"
                }
              ]
            },
            {
              "id": "10"
            }
          ]
        },
        {
          "id": "11"
        },
        {
          "id": "12"
        }
      ]
    },
    {
      "id": "13"
    },
    {
      "id": "14"
    }
  ]
};

객체 안의 값으로 배열이 , 배열 안에 또 객체가 , 그 객체의 값으로 또 배열 안에 객체.. 반복반복

 

인자로 DATA_TREE[item] 과 찾을 id 를 각 변수로 json , id 로 주어서 받는 함수를 생성.

 

 먼저 json = DATA_TREE[item] 이므로 배열. 각 배열의 요소를 for문으로 탐색해서 그 안에 객체의 값으로 id 가 있다면 요소를 리턴.

var util = {
  getObjectById: function(json, id) {

    for(let i = 0; i < json.length; i++){
      for(let key in json[i]){
        if(json[i][key]===id){
          return json[i]
        }

탐색하다가 객체의 값이 배열이라면 그 배열을 다시 재귀적으로 실행해서 반복.

}
        else if(Array.isArray(json[i][key])){
          return util.getObjectById(json[i][key],id)
        }
      } 
    }   
  }
}

 

결과확인

 

'Study JS for me > Algorithm' 카테고리의 다른 글

recursion 예제연습4  (0) 2019.05.07
algorithm 연습10  (0) 2019.05.06
algorithm 연습9  (0) 2019.05.05
algorithm 연습8  (0) 2019.05.04
recursion 예제연습3  (0) 2019.05.04
Comments