题目: 用javascript实现一个函数将下面数组格式变量(格式如下)转换成树形格式变量(格式如下),并打印出来。 数组格式例子: ( 说明:value表示当前值,id表示唯一标识,parent表示其父节点的id编号,如果没有父节点则为null) [ { value: '江苏', parent: null, id: '1' }, { value: '苏州', parent: '1', id: '1.1' }, { value: '吴中区', parent: '1.1', id: '1.1.1' }, { value: '浙江', parent: null, id: '2' }, { value: '杭州', parent: '2', id: '2.1' }, { value: '余杭区', parent: '2.1', id: '2.1.1' } ] 树形格式例子:( 说明:value表示当前值,id表示唯一标识,children表示该节点下所有的子节点 ) [ { value: '江苏', id: '1', children: [ { value: '苏州', id: '1.1', children: [ { value: '吴中区', id: '1.1.1' } ]} ]}, { value: '浙江', id: '2', children: [ { value: '杭州', id: '2.1', children: [ { value: '余杭区', id: '2.1.1' } ]} ]} ] 需注意的是树形结构可能会有多层(1层,2层,3层,...),取决于数组变量的实际值。
时间: 2023-12-24 08:03:14 浏览: 101
javascript判断一个变量是数组还是对象
以下是使用JavaScript实现将数组格式转换成树形格式的函数:
```javascript
function arrayToTree(arr) {
const map = {};
const roots = [];
// 将数组中的每个节点的id作为key,value作为节点存入map中
arr.forEach(node => {
map[node.id] = { ...node, children: [] };
});
// 遍历数组中的每个节点,将其作为子节点添加到其父节点的children数组中
arr.forEach(node => {
const parent = map[node.parent];
if (parent) {
parent.children.push(map[node.id]);
} else {
roots.push(map[node.id]);
}
});
return roots;
}
```
使用示例:
```javascript
const arr = [
{ value: '江苏', parent: null, id: '1' },
{ value: '苏州', parent: '1', id: '1.1' },
{ value: '吴中区', parent: '1.1', id: '1.1.1' },
{ value: '浙江', parent: null, id: '2' },
{ value: '杭州', parent: '2', id: '2.1' },
{ value: '余杭区', parent: '2.1', id: '2.1.1' }
];
const tree = arrayToTree(arr);
console.log(tree);
```
输出结果:
```javascript
[
{
"value": "江苏",
"parent": null,
"id": "1",
"children": [
{
"value": "苏州",
"parent": "1",
"id": "1.1",
"children": [
{
"value": "吴中区",
"parent": "1.1",
"id": "1.1.1",
"children": []
}
]
}
]
},
{
"value": "浙江",
"parent": null,
"id": "2",
"children": [
{
"value": "杭州",
"parent": "2",
"id": "2.1",
"children": [
{
"value": "余杭区",
"parent": "2.1",
"id": "2.1.1",
"children": []
}
]
}
]
}
]
```
阅读全文