js数组转tree结构

var data = [
{ id: 1, pid: 0, name: '沃尔玛' },
{ id: 2, pid: 0, name: '生鲜区' },
{ id: 3, pid: 1, name: '日用品区' },
{ id: 4, pid: 2, name: '鱼' },
{ id: 5, pid: 2, name: '牛肉' },
{ id: 6, pid: 13, name: '卫生纸' },
{ id: 7, pid: 3, name: '牙刷' },
{ id: 8, pid: 7, name: '电动牙刷' },
{ id: 9, pid: 7, name: '普通牙刷' }
];

function convertToTree(flatData) {
let treeData = [];
let map = new Map();
let outputObj, pid;
for (let i = 0; i < flatData.length; i++) {
pid = flatData[i].pid;
if (map.has(pid)) {
if (!map.get(pid).childrens)
map.get(pid).childrens = [];
let obj = new Object(flatData[i]);
map.get(pid).childrens.push(obj);
map.set(flatData[i].id, obj);
} else if (!map.has(pid) && pid === 0) {
// '&& pid === 0' 判断条件是为了只将 pid 为 0 作为根节点,其它值不作为根节点。
// 如需将其它值也作为根节点,可将 'else if (!map.has(pid) && pid === 0)' 改为 'else'

        outputObj = new Object(flatData[i]);
        treeData.push(outputObj);
        map.set(flatData[i].id, outputObj);
    }
}
return treeData;

}

let TreeData = convertToTree(data);
console.log(TreeData);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容