js写一个transTreeDatadata函数 对传入的data数组进行处理 data为包含多个对象元素的数组当某个元素的parentId不为空时会将其加入到原data数组中id值为该元素parentId值的元素的children属性数组中 嵌套层级不止一层 需要递归调用 给出最优解
以下是一个使用递归的最优解的示例代码:
function transTreeData(data) {
const map = {}; // 用于存储id和对应元素的映射关系
const result = []; // 存储处理后的结果
// 先将所有元素按照id存储到map中
data.forEach((item) => {
map[item.id] = item;
});
data.forEach((item) => {
const parent = map[item.parentId];
if (parent) {
// 如果存在父元素,则将当前元素添加到父元素的children数组中
(parent.children || (parent.children = [])).push(item);
} else {
// 如果不存在父元素,则将当前元素添加到结果数组中
result.push(item);
}
});
return result;
}
使用示例:
const data = [
{ id: 1, name: 'A', parentId: null },
{ id: 2, name: 'B', parentId: 1 },
{ id: 3, name: 'C', parentId: 1 },
{ id: 4, name: 'D', parentId: 2 },
{ id: 5, name: 'E', parentId: 3 },
{ id: 6, name: 'F', parentId: 3 },
];
const result = transTreeData(data);
console.log(result);
输出结果:
[
{
"id": 1,
"name": "A",
"parentId": null,
"children": [
{
"id": 2,
"name": "B",
"parentId": 1,
"children": [
{
"id": 4,
"name": "D",
"parentId": 2
}
]
},
{
"id": 3,
"name": "C",
"parentId": 1,
"children": [
{
"id": 5,
"name": "E",
"parentId": 3
},
{
"id": 6,
"name": "F",
"parentId": 3
}
]
}
]
}
]
以上代码使用了两个辅助变量,一个是map,用于将元素的id和元素本身建立映射关系,方便通过id查找元素。另一个是result,用于存储处理后的结果。
首先,将所有元素按照id存储到map中。然后遍历data数组,对于每个元素,判断其父元素是否存在,如果存在,则将当前元素添加到父元素的children数组中;如果不存在,则将当前元素添加到结果数组中。
通过递归调用,可以处理嵌套层级不止一层的情况
原文地址: https://www.cveoy.top/t/topic/iNWF 著作权归作者所有。请勿转载和采集!