Computer >> Máy Tính >  >> Lập trình >> Javascript

Làm cách nào để tạo khóa con bằng khóa cha trong JavaScript mảng?

Giả sử, chúng ta có một loạt các đối tượng như thế này -

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' }
];

Chúng tôi bắt buộc phải viết một hàm nhận trong mảng này và trả về một mảng đối tượng mới với mỗi đối tượng có thêm thuộc tính “con” phải là một mảng của tất cả id đối tượng có thể là con trực tiếp hoặc gián tiếp của một đối tượng cụ thể.

Do đó, đầu ra sẽ giống như -

[
   { 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: [] }
]

Bây giờ, hãy viết mã cho chức năng này -

Ví dụ

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));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[
   { 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: [] }
]