后端返回的数据,数组结构转变为树状数组结构

var arr = [
            {
                qwe: '/qwe/123/3.mp3'
            },
            {
                qwe: '/qwe/123/2.mp3'
            },
            {
                qwe: '/qwe/123/3.mp3'
            },
            {
                qwe: '/qwe/234/4.mp3'
            },
            {
                qwe: '/asd/123/1.mp3'
            }
        ]

        //arr转换为data

        var data = [
            {
                label: 'qwe',
                children: [{
                    label: '123',
                    children: [{
                        label: '1.mp3'
                    },
                    {
                        label: '2.mp3'
                    },
                    {
                        label: '3.mp3'
                    },
                    {
                        label: '4.mp3'
                    }
                    ],
            },
            {
                label: '234',
                children: [{
                    label: '4.mp3'
                }],
            }
            ]
        },
        {
            label: 'asd',
            children: [{
                label: '123',
                children: [{
                    label: '1.mp3'
                }],
            },

            ]
        }
        ]

使用字符串的split方法拆分,例如:'/qwe/123/3.mp3'.split('/');
得到:["", "qwe", "123", "3.mp3"]

然后循环向data里面存,判断上面数组的第2项是否已经放进去了,如果没有就添加,如果已经存在就更新
第3项处理方式同第2项

伪代码如下
var data = [];
for (var i = 0; i < arr.length; i++)
{
var paths = arr[i].qwe.split('/');
obj = data;
for (var j = 0;  < paths.length; j++)
{
if (obj.children.find(x => x.label == paths[i]) !== undefined)
obj = obj.find(x => x.label == path[i]);
else
{
obj = new { label : paths[i], children = [] };
data.push(obj);
}
}
}