Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
深度合并对象的字符串javascript数组_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

深度合并对象的字符串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)
  })