joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

树形数据拍平实现代码

  • js实现函数
function tree(arr) {
	var newarr = [];
	arr.forEach(item => {
		if (item.childrens) {
			newarr.push(...tree(item.childrens))
			delete item.childrens
		}
		newarr.push({ ...item })
	});
	return newarr
};

var way = tree(data);
console.log(way);
  • 数据格式
[
	{
		id: 1, pid: 0, name: 'sdflksjfd',
		childrens: [
			{
				id: 2, pid: 1, name: 'sdfsfd',
				childrens: [
					{
						id: 4,
						pid: 2,
						name: 'sdf',
						childrens:[
							{
								id:8,
								pid:4,
								name:'sfsdfs',
							},
							{
								id:9,
								pid:4,
								name:'sfdsdf',
							}
						]
					},
					{ id: 5, pid: 2, name: 'sfsfd' }
				]
			},
			{
				id: 3, pid: 1, name: 'sdfsdf',
				childrens: [
					{ id: 6, pid: 3, name: 'sdfsdf' },
					{ id: 7, pid: 3, name: 'sdfsdf' }
				]
			}
		]
	}   
];


一维数组转树形数据实现代码

  • 数据格式
[
	{ id: 1, pid: null, name: '一级' },
	{ id: 2, pid: 1, name: '二级' },
	{ id: 3, pid: 1, name: '二级' },
	{ id: 4, pid: 2, name: '三级' },
	{ id: 5, pid: 2, name: '三级' },
	{ id: 6, pid: 3, name: '三级' },
	{ id: 7, pid: 3, name: '三级' },
	{ id: 8, pid: 7, name: '四级' },
	{ id: 9, pid: 7, name: '四级' }
];
  • js实现函数
function arrt(arr, pid = null) {
	const res = [];
	source.forEach(item => {
		if (item.pid === pid) {
			const children = arrt(arr.filter(e => e.pid != pid), item.id)
			if (children.length) {
				res.push({ ...item, children })
			} else {
				res.push({ ...item })
			}
		}
	});
	return res
}

参考文章

https://blog.csdn.net/m0_66504310/article/details/130996706

posted on 2024-07-03 23:59  joken1310  阅读(4)  评论(0编辑  收藏  举报