Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
506 views
in Technique[技术] by (71.8m points)

关于js的树形数组的问题?

像data这样的结构如何处理成result那样的结构(分一层都加了个level属性表示层级数)

var data = {
    name: 'foo',
    children:[
        {
            name: 'test',
            children: [
                {
                    name: 'bar',
                    children: [
                        {
                            name: 'baz',
                        }
                    ]
                }
            ],
            name: 'demo',
            children: [
                {
                    name: 'zxc',
                }
            ],
        }
    ]
}
var result = {
    name: 'foo',
    level: 1,
    children:[
        {
            name: 'test',
            level: 2,
            children: [
                {
                    name: 'bar',
                    level: 3,
                    children: [
                        {
                            name: 'baz',
                            level: 4
                        }
                    ]
                }
            ],
        },
        {
            name: 'demo',
            level: 2,
            children: [
                {
                    name: 'zxc',
                    level: 3,
                }
            ],
        }
    ]
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

我的思路

var data = {
      name: "foo",
      children: [
        {
          name: "test",
          children: [
            {
              name: "bar",
              children: [
                {
                  name: "baz"
                }
              ]
            }
          ],
          name: "demo",
          children: [
            {
              name: "zxc"
            }
          ]
        }
      ]
    };
    const func = (obj, lv = 1) => {
      const result = { ...obj, level: lv };
      if (obj.children)
        result.children = obj.children.map(item => func(item, lv + 1));
      return result;
    };
    console.log(func(data));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...