我有一个对象数组,如下所示:
arr =[{
refno: "1",
name : "section-1"
},{
refno: "1.1",
name : "section-1.1"
},{
refno: "1.1.1",
name : "section-1.1.1"
},{
refno: "1.1.2",
name : "section-1.1.2"
},{
refno: "1.1.3",
name : "section-1.1.3"
},{
refno: "1.2",
name : "section-1.2"
},{
refno: "1.2.1",
name : "section-1.2.1"
}]
我需要像这样转换此数组:
[{
"1": {
name: "Section-1",
children: [{
"1.1": {
name: "Section-1.1",
children: [{
"1.1.1": {
name: "Section-1.1.1",
children: []
},
"1.1.2": {
name: "Section-1.1.2",
children: []
},
"1.1.2": {
name: "Section-1.1.3",
children: []
}
}]
},
"1.2": {
name: "Section-1.2",
children: [{
name: "Section-1.2",
children: {
"1.2.1": {
name: "Section-1.2.1",
children: []
}
}
}]
}]
}
}
}]
答案 0 :(得分:1)
我为此而努力。输出结果可能与您的略有不同。请检查代码和输出。 Gist
var arr =[{
refno: "1",
name : "section-1"
},{
refno: "1.1",
name : "section-1.1"
},{
refno: "1.1.1",
name : "section-1.1.1"
},{
refno: "1.1.2",
name : "section-1.1.2"
},{
refno: "1.1.3",
name : "section-1.1.3"
},{
refno: "1.2",
name : "section-1.2"
},{
refno: "1.2.1",
name : "section-1.2.1"
}];
function hasKey2(arr, key) {
let index = -1;
for (let x of arr) {
if (x[key] != undefined) {
index = x;
break;
}
}
return index;
}
function main(arr) {
let output = [];
for (let element of arr) {
const refno = element.refno;
const refArr = element.refno.split(".");
let tempArr = output;
let markSection = "section-";
for (let ref of refArr) {
markSection = markSection + ref;
let ind = hasKey2(tempArr, ref);
if (ind != -1) {
tempArr = ind[ref].children;
} else {
tempArr.push({
[ref]: {
name: markSection,
children: []
}
});
tempArr = tempArr[tempArr.length - 1][ref].children;
}
markSection = markSection + ".";
}
}
console.log("Output ", output);
return output;
}
main(arr);
输出如下。
[{"1":{"name":"section-1","children":[{"1":{"name":"section-1.1","children":[{"1":{"name":"section-1.1.1","children":[]}},{"2":{"name":"section-1.1.2","children":[]}},{"3":{"name":"section-1.1.3","children":[]}}]}},{"2":{"name":"section-1.2","children":[{"1":{"name":"section-1.2.1","children":[]}}]}}]}}]