treeOfFlat.ts 1.0 KB

123456789101112131415161718192021222324252627282930
  1. // 数据扁平化
  2. export function treeToFlat(data: any[], Id = 'Id', key = 'ParentId', children = 'Children') {
  3. // <!-- 此处需要使用function,不能使用箭头函数,否则下方的arguments存在异常 -->
  4. const result = data.reduce(function fn(prev: {}[], curr: { [x: string]: any; }) {
  5. let obj = {};
  6. for (var c in curr) {
  7. if (c !== children) Object.assign(obj, { [c]: curr[c] });
  8. }
  9. prev.push(obj);
  10. curr[children] &&
  11. curr[children].forEach((v: { [x: string]: any; }) => {
  12. v[key] = curr['Id'] || curr[Id];
  13. fn(prev, v);
  14. });
  15. return prev;
  16. }, []);
  17. return result;
  18. }
  19. // 数据反扁平化
  20. export function flatToTree(data: any[], key = 'ParentId', children = 'Children') {
  21. const result = data.reduce(function (prev, curr, i, arr) {
  22. curr[children] = arr.filter((v) => v[key] === curr['Id'])
  23. curr[children] = curr[children].length ? curr[children] : undefined;
  24. if (!curr[key]) {
  25. prev.push(curr);
  26. }
  27. return prev;
  28. }, []);
  29. return result;
  30. }