js将数组转成对应的树形结构:
function transformArrayToObject(array) { const result = {}; array.forEach(item => { const { id, name, pid, flag } = item; if (pid == 0) { result[name] = { id, flag, pid } } else { transformObj(result, item) } }); return result; } function transformObj(obj, item) { const { id, name, pid, flag } = item; for (var key in obj) { var val = obj[key] if (key != 'id') { if (typeof val === 'object') { transformObj(val, item) } } else { if (val == pid) { obj[name] = { id, flag, pid } break; } } } return obj } function adjustObj(obj) { let flag = false; for (var key in obj) { if (typeof obj[key] === 'object') { obj[key] = adjustObj(obj[key]); flag = true } } if (!flag) { obj = obj.flag } return obj } const array = [{ id: 1, name: 'index', pid: 0, flag: true, }, { id: 2, name: 'monitor', pid: 1, flag: true, }, { id: 3, name: 'scan', pid: 1, flag: true, }, { id: 4, name: 'subscan', pid: 3, flag: false, }, { id: 5, name: 'legder', pid: 0, flag: true, }, { id: 6, name: 'add', pid: 5, flag: false }, ]; const transformedObject = transformArrayToObject(array); console.log("没有子级不做处理,依旧是对象结构:", transformedObject) //const adObj = adjustObj(transformedObject) //console.log("对没有子级的做处理,不返回对象:", adObj)
效果图:
标签:key,obj,name,pid,js,flag,树形,数组,id From: https://www.cnblogs.com/huiing/p/18149971