扁平数组与树状结构的转换

我们在使用后台传过来的数据的时候,有时候我们会得到树状结构的数据,虽然有时候,后端会处理掉,但,毕竟我们也可以在前端给它处理一下,一方面也锻炼一下脑子,天天写页面都没思考能力了。

树状结构转为扁平数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
let tree = {
id: '1',
pid: '7',
name: 'aaaaa',
children: [
{
id: '2',
pid: '1',
name: 'bbbbbbb',
children: [
{
id: '6',
pid: '2',
name: 'ccccc',
children: [{ id: '9', pid: '6', name: 'dddd' }],
},
],
},
],
};

const toArray = (tree, children) => {
let arr = [];
const a = ls => {
if (ls instanceof Array) {
ls.forEach(o => {
let c = o[children];
delete o[children];
arr.push(o);
a(c);
});
}
};
tree instanceof Array ? a(tree) : a([tree]);
return arr;
};
toArray(tree, 'children');
/* [
{ id: '1', pid: '7', name: 'aaaaa' },
{ id: '2', pid: '1', name: 'bbbbbbb' },
{ id: '6', pid: '2', name: 'ccccc' },
{ id: '9', pid: '6', name: 'dddd' }
] */

扁平数组转为树状结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
let array = [
{ id: '1', pid: '7', name: 'aaaaa' },
{ id: '2', pid: '1', name: 'bbbbbbb' },
{ id: '6', pid: '2', name: 'ccccc' },
{ id: '9', pid: '6', name: 'dddd' },
];
const arrayToTree = (arr, id, pid) => {
if (!id || id == '') {
return [];
}
if (arr instanceof Array) {
let tree = [];
let treeMap = {};
arr.forEach(o => {
treeMap[o[id]] = o;
});
arr.forEach(o => {
let parent = treeMap[o[pid]];
if (parent && o[id] != o[pid]) {
if (!parent.children) {
parent.children = [];
}
parent.children.push(o);
} else {
tree.push(o);
}
});
return tree;
} else {
return [arr];
}
};
arrayToTree(array, 'id', 'pid');
/* {
id: '1',
pid: '7',
name: 'aaaaa',
children: [
{
id: '2',
pid: '1',
name: 'bbbbbbb',
children: [
{
id: '6',
pid: '2',
name: 'ccccc',
children: [{ id: '9', pid: '6', name: 'dddd' }],
},
],
},
],
} */

在这里记录是为了以防用的时候找不到,这脑子 😝,万一忘了呢

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%