js算法-两种将数组数据转为属性结构记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了js算法-两种将数组数据转为属性结构记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1549字,纯文字阅读大概需要3分钟。
内容图文
![js算法-两种将数组数据转为属性结构记录](/upload/InfoBanner/zyjiaocheng/597/82ff790b02f04af4ba384596740d1ce8.jpg)
let arr = [
{ id: 2, name: "部门B", parentId: 0 },
{ id: 3, name: "部门C", parentId: 1 },
{ id: 1, name: "部门A", parentId: 2 },
{ id: 4, name: "部门D", parentId: 1 },
{ id: 5, name: "部门E", parentId: 2 },
{ id: 6, name: "部门F", parentId: 3 },
{ id: 7, name: "部门G", parentId: 2 },
{ id: 8, name: "部门H", parentId: 4 },
];
/* function listToTree(oldArr) {
oldArr.forEach((element) => {
let parentId = element.parentId;
if (parentId !== 0) {
oldArr.forEach((ele) => {
if (ele.id == parentId) {
//当内层循环的ID== 外层循环的parendId时,(说明有children),需要往该内层id里建个children并push对应的数组;
if (!ele.children) {
ele.children = [];
}
ele.children.push(element);
}
});
}
});
// console.log(oldArr); //此时的数组是在原基础上补充了children;
oldArr = oldArr.filter((ele) => ele.parentId === 0); //这一步是过滤,按树展开,将多余的数组剔除;
// console.log(oldArr);
return oldArr;
}
*/
function transTree(data) {
let result = [];
let map = {};
if (!Array.isArray(data)) {
//验证data是不是数组类型
return [];
}
data.forEach((item) => {
//建立每个数组元素id和该对象的关系
map[item.id] = item; //这里可以理解为浅拷贝,共享引用
});
data.forEach((item) => {
let parent = map[item.parentId]; //找到data中每一项item的爸爸
if (parent) {
//说明元素有爸爸,把元素放在爸爸的children下面
(parent.children || (parent.children = [])).push(item);
} else {
//说明元素没有爸爸,是根节点,把节点push到最终结果中
result.push(item); //item是对象的引用
}
});
return result; //数组里的对象和data是共享的
}
console.log(transTree(arr));
参考:https://www.jianshu.com/p/bbdc8178a2dc
https://www.jb51.net/article/167897.htm
内容总结
以上是互联网集市为您收集整理的js算法-两种将数组数据转为属性结构记录全部内容,希望文章能够帮你解决js算法-两种将数组数据转为属性结构记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。