javascript将嵌套字典转换为树状数组结构
我有一个字符串输入示例,格式为“a.b.c”、“a.d.e”等 我想将以“.”分隔的字符串部分转换为树结构 因此,我编写了下面的函数来从这样一个输入数组创建一个嵌套的dictionary对象-javascript将嵌套字典转换为树状数组结构,javascript,arrays,dictionary,tree,transformation,Javascript,Arrays,Dictionary,Tree,Transformation,我有一个字符串输入示例,格式为“a.b.c”、“a.d.e”等 我想将以“.”分隔的字符串部分转换为树结构 因此,我编写了下面的函数来从这样一个输入数组创建一个嵌套的dictionary对象- function items_to_tree(items) { var arr = {}; items.forEach(function(item){ var parts = item.split("."); var last = parts.pop();
function items_to_tree(items) {
var arr = {};
items.forEach(function(item){
var parts = item.split(".");
var last = parts.pop();
var cursor = arr;
parts.forEach(function(part){
if(!cursor[part]) cursor[part] = {};
cursor = cursor[part];
});
cursor[last] = {};
});
return arr;
}
例如,如果我给这个函数提供以下示例输入-
var items = ["a.b", "a.c", "b.c", "a.c", "a.c.d", "a.b.d"]
我得到了预期的{code>{a:{b:{d:{},c:{d:{},b:{c:{}}
但是,我希望输出的格式与此类似-
[{name: "a", children: [{name: "b", children: [{name: "d", children: []}]}]}, {name: "c", children: [{name: "d", children: []}]}, {name: "b", children: [{name: "c", children: []}]}]
是否有任何方法可以修改items_to_tree函数以返回此类输出,或者
是否可以从项目\u到\u树的中间输出
[嵌套字典]可以转换为这种树状javascript对象数组。您可以在嵌套数组中搜索给定名称,然后使用该对象或创建一个新对象
var项目=[“a.b”、“a.c”、“b.c”、“a.c”、“a.c.d”、“a.b.d”],
结果=[];
items.forEach(函数(路径){
path.split('.').reduce(函数(级别,键){
var temp=level.find(({name})=>key==name);
如果(!temp){
temp={name:key,子项:[]};
水平推力(温度);
}
返回临时儿童;
},结果);
});
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
我将为最终数据转换编写第二个函数。您的项到树
非常通用且可重用。可以通过几行代码将此树转换为所需格式:
function tree_to_format(tree) {
return Object
.keys(tree)
.map(k => ({ name: k, children: tree_to_format(tree[k]) }))
};
现在,您可以通过将项的结果管道化到树
到树
到格式
来编写所需的函数:
功能项到树(项){
var arr={};
items.forEach(功能(项目){
var零件=项目拆分(“.”);
var last=parts.pop();
var=arr;
部分。forEach(功能(部分){
如果(!cursor[part])cursor[part]={};
光标=光标[部分];
});
游标[last]={};
});
返回arr;
}
函数树\u到\u格式(树){
返回对象
.钥匙(树)
.map(k=>({name:k,children:tree_to_格式(tree[k])}))
};
console.log(
树到树格式(
项目到目录树([“a.b”,“a.c”,“b.c”,“a.c”,“a.c.d”,“a.b.d”])
)
);
//甚至:
常数compose=(f,g)=>x=>f(g(x));
const items_to_format=组合(树到树,项到树)代码>太棒了,谢谢你的帮助。我想我已经理解了这里使用的概念。