Javascript 指向treeview的路径名字符串数组

Javascript 指向treeview的路径名字符串数组,javascript,treeview,Javascript,Treeview,我输入了如下数据: ['Level 1/Level 2/Level 3/ Level4a', 'Level 1/Level 2/Level 3/ Level4b', 'Level 1/Level 2/Level 3/ Level4c', 'Level 1/Level 2/Level 3/ Level4a', 'Level 1c/Level 2d/Level 3b/ Level4d', 'Level 1c/Level 2d/Level 3b/ Level4e', 'Level 1c/Level 2

我输入了如下数据:

['Level 1/Level 2/Level 3/ Level4a',
'Level 1/Level 2/Level 3/ Level4b',
'Level 1/Level 2/Level 3/ Level4c',
'Level 1/Level 2/Level 3/ Level4a',
'Level 1c/Level 2d/Level 3b/ Level4d',
'Level 1c/Level 2d/Level 3b/ Level4e',
'Level 1c/Level 2d/Level 3b/ Level4f']
现在我想将其转换为treeview数组,如下所示:

tree: [
                {
                    name: 'Level 1',
                    children: [
                        {
                            name: 'Level 2',
                            children: [
                                {
                                    name: 'Level 3',
                                    children: [
                                        {name: 'Level 4a'},
                                        {name: 'Level 4b'},
                                        {name: 'Level 4c'}
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    name: 'Level 1c',
                    children: [
                        {
                            name: 'Level 2d',
                            children: [
                                {
                                    name: 'Level 3b',
                                    children: [
                                        {name: 'Level 4d'},
                                        {name: 'Level 4e'},
                                        {name: 'Level 4f'}
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
有一种迭代的方法,但我想它太复杂了。
最好的方法是什么

您可以获取最后插入对象的数组,并检查名称是否与最后一个不相等。如果是,请添加新对象

var数据=['1级/2级/3级/4a级','1级/2级/3级/4b级','1级/2级/3级/4c级','1级/2级/3级/4a级','1c级/2d级/3b级/4d级','1c级/2d级/3b级/4e级','1c级/2d级/3b级/4f级',
tree=[],
级别=[{children:tree}];
data.forEach(s=>s.split('/')。forEach((名称,i)=>{
如果(!levels[i+1]| | levels[i+1].name!==name){
级别[i]。儿童=级别[i]。儿童| |[];
levels[i].children.push(levels[i+1]={name});
}
}));
控制台日志(树)

。作为控制台包装{最大高度:100%!重要;顶部:0;}
您可以使用2
reduce
s。第一个是循环通过阵列。第二个
reduce
是循环通过
split()
字符串。使用
find()
检查数组中是否存在元素

var arr=['1级/2级/3级/4a级','1级/2级/3级/4b级','1级/2级/3级/4c级','1级/2级/3级/4a级','1c级/2级/3级/4e级','1c级/2级/3级/4f级';
var结果=arr.REDUCT((c,v)=>{
v、 拆分('/')。减少((a,o,i)=>{
如果(i==0)var p=a;
else var p=a.children=a.children | |[];
设f=p.find(x=>x.name==o.trim());
如果(!f){
f={name:o.trim()};
p、 推(f);
}
返回f;
}(c);
返回c;
}, []);

控制台日志(结果)请添加您尝试过的内容。数据是否已排序?顺便说一句,给定的数据与所需的结果不匹配。@NinaScholz Yes data Sortedt如果数据数组混合,例如最后一个数据元素将再次以“Level 1”开头,则该数据将无法正常工作。@Laziotibjczyk,数据已排序,如op所述。哦,是的,我道歉。在对数据进行排序的情况下,您的解决方案将起作用。