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"}