用js把列表数据转化成树状数据
时间: 2023-05-16 11:04:33 浏览: 57
可以使用递归的方式来实现将列表数据转化成树状数据。具体实现可以参考以下代码:
function listToTree(list) {
var map = {}, node, roots = [], i;
for (i = 0; i < list.length; i += 1) {
map[list[i].id] = i; // 初始化map
list[i].children = []; // 初始化children
}
for (i = 0; i < list.length; i += 1) {
node = list[i];
if (node.parentId !== "0") {
list[map[node.parentId]].children.push(node);
} else {
roots.push(node);
}
}
return roots;
}
其中,list是一个包含所有列表数据的数组,每个元素都包含一个id和parentId属性,表示该元素的父元素id。函数返回一个树状结构的数组,每个元素都包含一个children属性,表示该元素的子元素。
相关问题
用JavaScript写一个从后台数据库读取数据,并生成树形列表
很抱歉,作为AI语言模型,我无法直接与后台数据库交互,并生成树形列表。但是,我可以为您提供一个大致的思路和代码框架,供参考:
首先,您需要使用AJAX技术从后台数据库获取数据。以下是一个简单的示例代码:
```
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var data = JSON.parse(this.responseText);
// 在这里处理数据
}
};
xhttp.open("GET", "your_api_url", true);
xhttp.send();
```
在这里,您需要将your_api_url替换为您的后台API地址,以便从数据库中获取数据。这里使用了XMLHttpRequest对象来发送异步HTTP请求,并在请求完成后处理响应数据。
接下来,您需要将数据转换为树形结构。具体实现方式可以根据您的数据结构和需求而定。以下是一个简单的示例代码:
```
function arrayToTree(array, idAttr, parentAttr, childrenAttr) {
var tree = [],
lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
lookup[item[idAttr]] = item;
item[childrenAttr] = [];
}
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
if (item[parentAttr] != null) {
lookup[item[parentAttr]][childrenAttr].push(item);
} else {
tree.push(item);
}
}
return tree;
}
```
在这里,您需要将array替换为您从后台数据库获取的数据。该函数会根据您指定的idAttr和parentAttr属性,将数组转换为树形结构,并返回树形结构的根节点数组。
最后,您需要将树形结构渲染为列表。以下是一个简单的示例代码:
```
function renderTree(tree, element) {
var ul = document.createElement('ul');
for (var i = 0, len = tree.length; i < len; i++) {
var li = document.createElement('li');
li.textContent = tree[i].name;
if (tree[i].children.length > 0) {
renderTree(tree[i].children, li);
}
ul.appendChild(li);
}
element.appendChild(ul);
}
```
在这里,您需要将tree替换为您转换后的树形结构,将element替换为您要渲染的DOM元素。该函数会递归地渲染树形结构为HTML列表。
综上所述,您需要将以上三段代码结合起来,才能实现从后台数据库读取数据,并生成树形列表的功能。当然,具体实现方式还需要根据您的具体情况进行调整和优化。
vue2.x中,将扁平的权限列表数据转换为树形结构的函数。
在 Vue 2.x 中,你可以使用以下方式将扁平的权限列表数据转换为树形结构的函数:
```javascript
function transListToTreeData(list, parentId) {
const treeData = [];
// 遍历权限列表数据
for (let i = 0; i < list.length; i++) {
const item = list[i];
// 如果当前权限的父级ID等于指定的父级ID
if (item.parentId === parentId) {
// 递归调用自身,查找当前权限的子级权限
const children = transListToTreeData(list, item.id);
// 将当前权限添加到树形数据中,并设置其子级权限
treeData.push({
...item,
children
});
}
}
return treeData;
}
```
这个函数接受两个参数:`list` 和 `parentId`。其中,`list` 是扁平的权限列表数据,`parentId` 是指定的父级ID,用于查找对应的子级权限。
函数的主要逻辑如下:
1. 创建一个空数组 `treeData`,用于存储转换后的树形结构数据。
2. 遍历权限列表数据。
3. 对于每个权限项,判断其父级ID是否等于指定的父级ID。
4. 如果相等,递归调用自身,并传入当前权限项的ID作为新的父级ID,以查找当前权限项的子级权限。
5. 将当前权限项添加到树形数据中,并设置其子级权限为递归调用的结果。
6. 返回转换后的树形数据 `treeData`。
通过这个函数,你可以将扁平的权限列表数据转换为树形结构的数据,便于在 Vue 组件中进行展示和操作。请注意,上述代码是一个示例,具体的实现可能需要根据你的权限列表数据结构进行调整。