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

배열 JavaScript에서 부모 키로 자식 키를 생성하는 방법은 무엇입니까?

<시간/>

다음과 같은 객체 배열이 있다고 가정해 보겠습니다. -

const arr = [
   { id: 1, parent_id: 0, title: 'Movies' },
   { id: 2, parent_id: 0, title: 'Music' },
   { id: 3, parent_id: 1, title: 'Russian movies' },
   { id: 4, parent_id: 2, title: 'Russian music' },
   { id: 5, parent_id: 3, title: 'New' },
   { id: 6, parent_id: 3, title: 'Top10' },
   { id: 7, parent_id: 4, title: 'New' },
   { id: 8, parent_id: 4, title: 'Top10' },
   { id: 9, parent_id: 0, title: 'Soft' }
];

우리는 이 배열을 받아 각 객체가 특정 객체의 직접 또는 간접 자식인 객체의 모든 ID의 배열이어야 하는 추가 속성 "자식"이 있는 객체의 새 배열을 반환하는 함수를 작성해야 합니다.

따라서 출력은 다음과 같아야 합니다. -

[
   { id: 1, parent_id: 0, title: 'Movies', childs: [ 3, 5, 6 ] },
   { id: 2, parent_id: 0, title: 'Music', childs: [ 4, 7, 8 ] },
   { id: 3, parent_id: 1, title: 'Russian movies', childs: [ 5, 6 ] },
   { id: 4, parent_id: 2, title: 'Russian music', childs: [ 7, 8 ] },
   { id: 5, parent_id: 3, title: 'New', childs: [] },
   { id: 6, parent_id: 3, title: 'Top10', childs: [] },
   { id: 7, parent_id: 4, title: 'New', childs: [] },
   { id: 8, parent_id: 4, title: 'Top10', childs: [] },
   { id: 9, parent_id: 0, title: 'Soft', childs: [] }
]

이제 이 함수의 코드를 작성해 보겠습니다 -

예시

const arr = [
   { id: 1, parent_id: 0, title: 'Movies' },
   { id: 2, parent_id: 0, title: 'Music' },
   { id: 3, parent_id: 1, title: 'Russian movies' },
   { id: 4, parent_id: 2, title: 'Russian music' },
   { id: 5, parent_id: 3, title: 'New' },
   { id: 6, parent_id: 3, title: 'Top10' },
   { id: 7, parent_id: 4, title: 'New' },
   { id: 8, parent_id: 4, title: 'Top10' },
   { id: 9, parent_id: 0, title: 'Soft' }
];
const generateChild = arr => {
   return arr.reduce((acc, val, ind, array) => {
      const childs = [];
      array.forEach((el, i) => {
         if(childs.includes(el.parent_id) || el.parent_id === val.id){
            childs.push(el.id);
         };
      });
      return acc.concat({...val, childs});
   }, []);
};
console.log(generateChild(arr));

출력

콘솔의 출력은 -

[
   { id: 1, parent_id: 0, title: 'Movies', childs: [ 3, 5, 6 ] },
   { id: 2, parent_id: 0, title: 'Music', childs: [ 4, 7, 8 ] },
   { id: 3, parent_id: 1, title: 'Russian movies', childs: [ 5, 6 ] },
   { id: 4, parent_id: 2, title: 'Russian music', childs: [ 7, 8 ] },
   { id: 5, parent_id: 3, title: 'New', childs: [] },
   { id: 6, parent_id: 3, title: 'Top10', childs: [] },
   { id: 7, parent_id: 4, title: 'New', childs: [] },
   { id: 8, parent_id: 4, title: 'Top10', childs: [] },
   { id: 9, parent_id: 0, title: 'Soft', childs: [] }
]