Javascript 从平面阵列创建树对象
我有点被这件事缠住了。我想从平面阵列创建一个树结构。假设我有这个输入:Javascript 从平面阵列创建树对象,javascript,Javascript,我有点被这件事缠住了。我想从平面阵列创建一个树结构。假设我有这个输入: var input = [ ["a","b","c"], ["a", "b","d"], ["e","f","g"], ]; 我想创建一个树状结构,如下所示: // output: [ { id: "a", children: [ {id: "b", children: [ {id: "c", child
var input = [
["a","b","c"],
["a", "b","d"],
["e","f","g"],
];
我想创建一个树状结构,如下所示:
// output:
[
{
id: "a",
children: [
{id: "b", children: [
{id: "c", children: []},
{id: "d", children: []}
]},
]
},
{
id: "e",
children: [
{
id: "f",
children: [{ id: "g", children: []}]
},
]
}
]
我考虑这样做的一种方法是拥有所有父对象的映射,并遍历输入数组来设置父对象到子对象的映射。但是,当我试图从该映射构造树对象并避免重复时,会遇到问题。感谢您的指点,谢谢 我找到了一个与你的问题类似的问题的解决方案 如果您有如下数据:
_makeTree({ q:
[
{"id": 123, "parentid": 0, "name": "Mammals"},
{"id": 456, "parentid": 123, "name": "Dogs"},
{"id": 214, "parentid": 456, "name": "Labradors"},
{"id": 810, "parentid": 456, "name": "Pugs"},
{"id": 919, "parentid": 456, "name": "Terriers"}
]
});
参数:
(数组):查询结果(参见下面的示例)q
(字符串):id列的名称(默认值:“id”)id
(字符串):ParentItemID列的名称(默认值:“parentid”)parentid
(字符串):要在具有子元素的行中创建的“子元素”数组的名称(默认值:“子元素”)children
[
{
"id": 123,
"parentid": 0,
"name": "Mammals",
"children": [
{
"id": 456,
"parentid": 123,
"name": "Dogs",
"children": [
{
"id": 214,
"parentid": 456,
"name": "Labradors"
},
{
"id": 810,
"parentid": 456,
"name": "Pugs"
},
{
"id": 919,
"parentid": 456,
"name": "Terriers"
}
]
}
]
}
]
现在,代码:
var\u makeTree=函数(选项){
变量子项,e,id,o,pid,temp,_i,_len,_ref;
id=options.id | |“id”;
pid=options.parentid | |“parentid”;
children=options.children | |“children”;
温度={};
o=[];
_ref=options.q;
对于(_i=0,_len=_ref.length;_i<_len;_i++){
e=_ref[_i];
温度[e[id]]=e;
如果(温度[e[pid]!=null){
if(temp[e[pid]][children]==null){
temp[e[pid]][children]=[];
}
temp[e[pid]][children].push(e);
}否则{
o、 推(e);
}
}
返回o;
};代码>从最里面的对象开始,然后将这些对象添加到上一层,然后将该对象添加到其上一层。@Jordan因此本质上是通过在每个项目上从右到左迭代来创建树?我想你可以这样想。但是,基本上我要说的是创建您的内部数组,然后使用array.push将该组添加到它上面的数组中。请记住,这个答案确实需要对您的项目进行排序(以便家长总是在他们的孩子之前。因为我找不到实现O(n)的npm模块没有这个限制的解决方案,我创建了以下一个(单元测试,100%代码覆盖率,只有0.5 kb大小,包括打字。也许它对某人有帮助:npmjs.com/package/performant-array-to-tree