Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

중첩 JavaScript 객체의 깊이 수준을 계산하는 방법은 무엇입니까?

<시간/>

다음과 같은 중첩된 개체가 있는 개체 배열이 있습니다.

const arr = [{
   id: 0, children: []
}, {
      id: 1, children: [{
      id: 2, children: []
}, {
      id: 3, children: [{
         id: 4, children: []
      }]
   }]
}];

우리의 임무는 재귀 함수를 작성하는 것입니다. 예를 들어 assignDepth()는 이 배열을 가져와서 각 중첩 객체에 깊이 속성을 할당합니다. id 0을 가진 객체는 깊이 0을 가질 것이고, id 1도 깊이 1을 가질 것이고, id 2와 id 3은 id 1 안에 중첩되기 때문에 그들은 깊이 1을 가질 것이고 id 3 안에 더 중첩되는 id 4는 깊이 2를 가질 것입니다.

따라서 이 함수에 대한 코드를 작성해 보겠습니다. 배열의 끝에 도달할 때까지 하위 개체를 반복적으로 반복하는 간단한 재귀 함수입니다. −

예시

const arr = [{
   id: 0, children: []
}, {
      id: 1, children: [{
      id: 2, children: []
}, {
      id: 3, children: [{
         id: 4, children: []
      }]
   }]
}];
const assignDepth = (arr, depth = 0, index = 0) => {
   if(index < arr.length){
      arr[index].depth = depth;
      if(arr[index].children.length){
         return assignDepth(arr[index].children, depth+1, 0);
      };
      return assignDepth(arr, depth, index+1);
   };
   return;
};
assignDepth(arr);
console.log(JSON.stringify(arr, undefined, 4));

출력

콘솔의 출력은 -

[
   {
      "id": 0,
      "children": [],
      "depth": 0
   },
   {
      "id": 1,
      "children": [
         {
            "id": 2,
            "children": [],
            "depth": 1
         },
         {
            "id": 3,
            "children": [
               {
                  "id": 4,
                  "children": [],
                  "depth": 2
               }
            ],
            "depth": 1
         }
      ],
      "depth": 0
   }
]