js数组转成树形结构

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)

 效果图:

 

 

posted on 2024-04-22 09:58  Breeze_zhou  阅读(434)  评论(0)    收藏  举报

导航