Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. // Transforms an array of entries like this:
  2. //
  3. // [
  4. // 'baz.tar.gz',
  5. // 'foo/bar/lol.txt',
  6. // 'foo/bar/kaka/perro/siete/lol.txt'
  7. // ]
  8. //
  9. // into this one:
  10. //
  11. // baz.tar.gz:
  12. // size: 10
  13. // foo:
  14. // size: 3
  15. // entries:
  16. // bar:
  17. // size: 3
  18. // entries:
  19. // lol.txt:
  20. // size: 7
  21. // kaka:
  22. // size: 4
  23. // entries:
  24. // perro:
  25. // size: 5
  26. // entries:
  27. // siete:
  28. // size: 5
  29. // entries:
  30. // lol.txt:
  31. // size: 7
  32.  
  33. const entries = [
  34. 'baz.tar.gz',
  35. 'foo/bar/lol.txt',
  36. 'foo/bar/kaka/perro/siete/lol.txt'
  37. ];
  38.  
  39. function printTree(tree, padding = '') {
  40. if (typeof tree !== 'object') {
  41. return ` ${tree}`;
  42. }
  43.  
  44. return Object.keys(tree).reduce((output, key) => {
  45. return `${output}\n${padding}${key}:${printTree(tree[key], `${padding} `)}`;
  46. }, '');
  47. }
  48.  
  49. function mergeEntryTrees(tree = {}, otherTree = {}) {
  50. if (typeof tree !== 'object' && typeof otherTree !== 'object') {
  51. return tree;
  52. }
  53.  
  54. const allKeys = [...new Set([...Object.keys(tree), ...Object.keys(otherTree)])];
  55.  
  56. return allKeys.reduce((partialTree, key) => {
  57. if (tree[key] && !otherTree[key]) {
  58. partialTree[key] = tree[key];
  59. }
  60.  
  61. if (!tree[key] && otherTree[key]) {
  62. partialTree[key] = otherTree[key];
  63. }
  64.  
  65. if (tree[key] && otherTree[key]) {
  66. partialTree[key] = mergeEntryTrees(tree[key], otherTree[key]);
  67. }
  68.  
  69. return partialTree;
  70. }, {});
  71. }
  72.  
  73. entries
  74. .map((entry) => {
  75. return entry.split('/').reduceRight((partialTree, part) => {
  76. return {
  77. [part]: {
  78. size: part.length,
  79. entries: partialTree,
  80. },
  81. };
  82. }, {});
  83. })
  84. .reduce((tree, partialTree) => {
  85. return mergeEntryTrees(tree, partialTree);
  86. }, {});
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement