-1

i got an array of folder like this:

[
    {
        name: "folder parent",
        subFolder: [
            {
                name: "folder child 1",
                subfolder: [
                    {
                        name: "folder child 2",
                        subfolder: [{...}]
                    }
                ]
            },
            {
                name: "folder child 1",
                subfolder: [
                    {
                        name: "folder child 2",
                        subfolder: [
                            {
                                name: "folder child 3",
                                subfolder: [{...}]
                            }
                        ]
                    }
                ]
            },
            // ... 
        ]
    }
]

The folder and subfolder can have many many ... because the user can create more and more.

I want to add a key-value called "layer" to every folders in this array, the "layer" indicates that which layer the folder belongs to, like this one:

[
    {
        name: "folder parent",
        layer: 0,
        subFolder: [
            {
                name: "folder child 1",
                layer: 1,
                subfolder: [
                    {
                        name: "folder child 2",
                        layer: 2,
                        subfolder: [{...}]
                    }
                ]
            },
            {
                name: "folder child 1",
                layer: 1,
                subfolder: [
                    {
                        name: "folder child 2",
                        layer: 2,
                        subfolder: [
                            {
                                name: "folder child 3",
                                layer: 3,
                                subfolder: [{...}]
                            }
                        ]
                    }
                ]
            },
            // ... 
        ]
    }
]

Can anyone get some help, thank you very much, and sorry for my bad english!

Van Dinh
  • 155
  • 1
  • 6
  • Familiarize yourself with [how to access and process nested objects, arrays or JSON](/q/11922383/4642212) and how to [create objects](//developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Object_initializer) and use the available static and instance methods of [`Object`](//developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object#Static_methods) and [`Array`](//developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array#Static_methods). – Sebastian Simon Aug 20 '21 at 03:33

1 Answers1

1

Pretty easy to do with recursion:

const root = {
  name: "folder parent",
  subfolder: [{
      name: "folder child 1",
      subfolder: [{
        name: "folder child 2",
        subfolder: []
      }]
    },
    {
      name: "folder child 1",
      subfolder: [{
        name: "folder child 2",
        subfolder: [{
          name: "folder child 3",
          subfolder: []
        }]
      }]
    }
  ]
};

const label = (folder, layer) => {
  folder.layer = layer;
  folder.subfolder.forEach(subfolder => label(subfolder, layer + 1));
};

label(root, 0);

console.log(root);
Robby Cornelissen
  • 91,784
  • 22
  • 134
  • 156