深度合并对象的字符串javascript数组
我正在尝试转换字符串数组(包含更多项): 插入这样的深嵌套对象(在以下模块中使用): 我设法做到了:深度合并对象的字符串javascript数组,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我正在尝试转换字符串数组(包含更多项): 插入这样的深嵌套对象(在以下模块中使用): 我设法做到了: fullRoutes.forEach(function(route){ let path = route.split(" ")[1].split("/").filter(function(e){ return e === 0 || e }) let object = {} path.reduce(function(o, s) { return o['c
fullRoutes.forEach(function(route){
let path = route.split(" ")[1].split("/").filter(function(e){ return e === 0 || e })
let object = {}
path.reduce(function(o, s) {
return o['children'] = {label: s, value: s, children: []}
}, object)
routes.push(object)
})
返回带有“children”的对象,但我正在努力正确地合并它们我相信这会起作用:
fullRoutes=[
'POST/api/v1/user/login',
“POST/api/v1/user/logout”,
“POST/api/v2/user/login”
];
路线=[];
fullRoutes.forEach(路由=>{
let path=route.split(“”)[1]。split(“/”).filter(e=>e);
让rs=路线;
for(设i=0,n=path.length;ir.label==seg);
如果(!节点)
rs.push(节点={
标签:seg,
值:segp,
儿童:[]
});
rs=节点。子节点;
}
});
控制台日志(路由)代码>我相信这会奏效:
fullRoutes=[
'POST/api/v1/user/login',
“POST/api/v1/user/logout”,
“POST/api/v2/user/login”
];
路线=[];
fullRoutes.forEach(路由=>{
let path=route.split(“”)[1]。split(“/”).filter(e=>e);
让rs=路线;
for(设i=0,n=path.length;ir.label==seg);
如果(!节点)
rs.push(节点={
标签:seg,
值:segp,
儿童:[]
});
rs=节点。子节点;
}
});
控制台日志(路由)代码>一种方法是将所有内容简化为一个对象,包括子对象
,并使用路径名作为子对象中的键
然后递归地遍历所有子对象,并使用Object#values()
将它们从对象转换为数组
constfullroutes=['POST/api/v1/user/login'、'POST/api/v1/user/logout'];
const tmp=fullRoutes.reduce(函数(tmp,route){
let path=route.split(“”[1]。split(“”/“”);
reduce(函数(o,s,i){
o[s]=o[s]|{label:s,value:s,children:{};
返回o[s]。子对象;
},tmp);
返回tmp;
},{});
常量节点=对象值(tmp);
nodes.forEach(childrenToArray);
console.log(节点)
//递归助手
函数childrenToArray(obj){
obj.children=对象值(obj.children);
对象children.forEach(childrenToArray)
}
.as控制台包装{max height:100%!important;}
一种方法是将所有内容简化为一个对象,包括子对象
,并将路径名用作子对象中的键
然后递归地遍历所有子对象,并使用Object#values()
将它们从对象转换为数组
constfullroutes=['POST/api/v1/user/login'、'POST/api/v1/user/logout'];
const tmp=fullRoutes.reduce(函数(tmp,route){
let path=route.split(“”[1]。split(“”/“”);
reduce(函数(o,s,i){
o[s]=o[s]|{label:s,value:s,children:{};
返回o[s]。子对象;
},tmp);
返回tmp;
},{});
常量节点=对象值(tmp);
nodes.forEach(childrenToArray);
console.log(节点)
//递归助手
函数childrenToArray(obj){
obj.children=对象值(obj.children);
对象children.forEach(childrenToArray)
}
。作为控制台包装{max height:100%!important;}
您能够使用第三方库吗?ie:你能使用第三方图书馆吗?ie:如果我需要使值“累积”,比如:api、api/v1、api/v1/user等等?同时将标签保留为该段?是的,保留标签,但将完整路径作为值,如果我需要使值“累积”,比如:api、api/v1,api/v1/user等..?保留标签仅为该段?保留标签,但将完整路径作为值
const nodes = [{
value: 'api',
label: 'api',
children: [
{ value: 'v1',
label: 'v1',
children: [
{ value: 'user',
label: 'user',
children: [
{ value: login, label: login},
{ value: logout, label: logout}
]
}
]
}
]
fullRoutes.forEach(function(route){
let path = route.split(" ")[1].split("/").filter(function(e){ return e === 0 || e })
let object = {}
path.reduce(function(o, s) {
return o['children'] = {label: s, value: s, children: []}
}, object)
routes.push(object)
})