js写一个transTreeDatadata函数 对data进行处理 data为包含多个元素为对象的数组如果某个元素的parentId不为空 会将其加入到id值为该parentId值的元素的children属性数组中 层级不止一层 可能要递归调用 给出最优解
以下是一个使用递归的transTreeData函数的示例:
function transTreeData(data) {
const map = {}; // 用于存储每个元素的id和对应的对象
const result = []; // 存储最终结果
// 遍历data,将每个元素以id为键存储到map中
for (let i = 0; i < data.length; i++) {
const item = data[i];
map[item.id] = item;
}
// 遍历data,将每个元素根据parentId放入对应的children数组中
for (let i = 0; i < data.length; i++) {
const item = data[i];
const parent = map[item.parentId];
if (parent) {
if (!parent.children) {
parent.children = [];
}
parent.children.push(item);
} else {
// 如果没有父元素,则将其作为根元素添加到result中
result.push(item);
}
}
return result;
}
使用示例:
const data = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
{ id: 3, parentId: 1 },
{ id: 4, parentId: 2 },
{ id: 5, parentId: 3 },
{ id: 6, parentId: 3 },
];
const result = transTreeData(data);
console.log(result);
输出结果:
[
{
id: 1,
parentId: null,
children: [
{
id: 2,
parentId: 1,
children: [
{ id: 4, parentId: 2 },
],
},
{
id: 3,
parentId: 1,
children: [
{ id: 5, parentId: 3 },
{ id: 6, parentId: 3 },
],
},
],
},
]
``
原文地址: https://www.cveoy.top/t/topic/iNVt 著作权归作者所有。请勿转载和采集!