const treeData = [
{
title: '0-0',
key: '0-0',
children: [
{
title: '0-0-0',
key: '0-0-0',
children: [
{ title: '0-0-0-0', key: '0-0-0-0' },
{ title: '0-0-0-1', key: '0-0-0-1' },
{ title: '0-0-0-2', key: '0-0-0-2' },
],
},
{
title: '0-0-1',
key: '0-0-1',
children: [
{ title: '0-0-1-0', key: '0-0-1-0' },
{ title: '0-0-1-1', key: '0-0-1-1' },
{ title: '0-0-1-2', key: '0-0-1-2' },
],
},
{
title: '0-0-2',
key: '0-0-2',
},
],
},
{
title: '0-1',
key: '0-1',
children: [
{ title: '0-1-0-0', key: '0-1-0-0' },
{ title: '0-1-0-1', key: '0-1-0-1' },
{ title: '0-1-0-2', key: '0-1-0-2' },
],
},
{
title: '0-2',
key: '0-2',
},
];
function flatten(data, keys, level = 0,isfold = false) {
return data.reduce((arr, x) => [
...arr,
keys.reduce((o, k) => (o[k] = x[k], o), { level,isfold:x.children ? true:false}),
...flatten(x.children || [], keys, level + 1,isfold),
], [])
}
console.log(flatten(treeData,['title','key']))
// 输出
0: {level: 0, isfold: true, title: "0-0", key: "0-0"}
1: {level: 1, isfold: true, title: "0-0-0", key: "0-0-0"}
2: {level: 2, isfold: false, title: "0-0-0-0", key: "0-0-0-0"}
3: {level: 2, isfold: false, title: "0-0-0-1", key: "0-0-0-1"}
4: {level: 2, isfold: false, title: "0-0-0-2", key: "0-0-0-2"}
5: {level: 1, isfold: true, title: "0-0-1", key: "0-0-1"}
6: {level: 2, isfold: false, title: "0-0-1-0", key: "0-0-1-0"}
7: {level: 2, isfold: false, title: "0-0-1-1", key: "0-0-1-1"}
8: {level: 2, isfold: false, title: "0-0-1-2", key: "0-0-1-2"}
9: {level: 1, isfold: false, title: "0-0-2", key: "0-0-2"}
10: {level: 0, isfold: true, title: "0-1", key: "0-1"}
11: {level: 1, isfold: false, title: "0-1-0-0", key: "0-1-0-0"}
12: {level: 1, isfold: false, title: "0-1-0-1", key: "0-1-0-1"}
13: {level: 1, isfold: false, title: "0-1-0-2", key: "0-1-0-2"}
14: {level: 0, isfold: false, title: "0-2", key: "0-2"}