Chúng ta có một mảng các đối tượng, các đối tượng này còn có các đối tượng lồng nhau như thế này -
const arr = [{ id: 0, children: [] }, { id: 1, children: [{ id: 2, children: [] }, { id: 3, children: [{ id: 4, children: [] }] }] }];
Công việc của chúng ta là viết một hàm đệ quy, ví dụ như lệnhignDepth () nhận trong mảng này và gán thuộc tínhdepth cho mỗi đối tượng lồng nhau. Giống như đối tượng có id 0 sẽ có độ sâu 0, id 1 cũng sẽ có độ sâu 1, và vì id 2 và id 3 được lồng vào bên trong id 1 nên chúng sẽ có độ sâu 1 và id 4 mà được lồng thêm bên trong id 3 sẽ có độ sâu 2.
Do đó, hãy viết mã cho chức năng này. Đây là một hàm đệ quy đơn giản lặp đi lặp lại các đối tượng con cho đến khi nó đến cuối mảng -
Ví dụ
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));
Đầu ra
Đầu ra trong bảng điều khiển sẽ là -
[ { "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 } ]