@kcuf/helper-tree 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ var _treeTrim = _interopRequireDefault(require("./tree-trim"));
12
12
  * 将平铺的(已标准化 `id` 和 `parentId`)数据转成树节点列表
13
13
  */
14
14
  function treeBuild(list) {
15
- var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
15
+ var maxLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
16
16
  var nodeMap = new Map();
17
17
  var listClone = list.map(function (v) {
18
18
  var treeItem = (0, _objectSpread2.default)({}, v);
@@ -50,5 +50,5 @@ function treeBuild(list) {
50
50
  }
51
51
  });
52
52
  }
53
- return depth > 0 ? (0, _treeTrim.default)(tree, depth) : tree;
53
+ return maxLevel > 0 ? (0, _treeTrim.default)(tree, maxLevel) : tree;
54
54
  }
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = treeTrim;
7
- function treeTrimRecursive(tree, maxDepth, currentDepth) {
8
- if (currentDepth >= maxDepth) {
7
+ function treeTrimRecursive(tree, maxLevel, currentLevel) {
8
+ if (currentLevel >= maxLevel) {
9
9
  tree.forEach(function (node) {
10
10
  node.children = null;
11
11
  delete node.children;
@@ -15,18 +15,18 @@ function treeTrimRecursive(tree, maxDepth, currentDepth) {
15
15
  tree.forEach(function (node) {
16
16
  var _node$children;
17
17
  if ((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length) {
18
- treeTrimRecursive(node.children, maxDepth, currentDepth + 1);
18
+ treeTrimRecursive(node.children, maxLevel, currentLevel + 1);
19
19
  }
20
20
  });
21
21
  }
22
22
 
23
23
  /**
24
- * 修建树到最大深度(注意,此方法会直接修改原树)
24
+ * 修建树(注意,此方法会直接修改原树)
25
25
  */
26
- function treeTrim(tree, maxDepth) {
27
- if (maxDepth < 1) {
26
+ function treeTrim(tree, maxLevel) {
27
+ if (maxLevel < 1) {
28
28
  return tree;
29
29
  }
30
- treeTrimRecursive(tree, maxDepth, 0);
30
+ treeTrimRecursive(tree, maxLevel, 1);
31
31
  return tree;
32
32
  }
@@ -6,7 +6,7 @@ import treeTrim from './tree-trim';
6
6
  * 将平铺的(已标准化 `id` 和 `parentId`)数据转成树节点列表
7
7
  */
8
8
  export default function treeBuild(list) {
9
- var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
9
+ var maxLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
10
10
  var nodeMap = new Map();
11
11
  var listClone = list.map(function (v) {
12
12
  var treeItem = _objectSpread({}, v);
@@ -44,6 +44,6 @@ export default function treeBuild(list) {
44
44
  }
45
45
  });
46
46
  }
47
- return depth > 0 ? treeTrim(tree, depth) : tree;
47
+ return maxLevel > 0 ? treeTrim(tree, maxLevel) : tree;
48
48
  }
49
49
  //# sourceMappingURL=tree-build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-build.js","names":["treeFlatten","treeTrim","treeBuild","list","depth","arguments","length","undefined","nodeMap","Map","listClone","map","v","treeItem","_objectSpread","set","id","putToParent","o","parentNode","get","parentId","_parentNode$children","children","push","forEach","tree","filter","flatten","find","vv"],"sources":["../../../src/helper/tree-build.ts"],"sourcesContent":["import {\n ITreeItemBase,\n TTreeItem\n} from '../types';\n\nimport treeFlatten from './tree-flatten';\nimport treeTrim from './tree-trim';\n\n/**\n * 将平铺的(已标准化 `id` 和 `parentId`)数据转成树节点列表\n */\nexport default function treeBuild<T extends ITreeItemBase>(list: T[], depth = 0): TTreeItem<T>[] {\n const nodeMap = new Map<string, TTreeItem<T>>();\n const listClone: TTreeItem<T>[] = list.map((v: T) => {\n const treeItem: TTreeItem<T> = { // shallow clone\n ...v\n };\n \n nodeMap.set(treeItem.id, treeItem);\n \n return treeItem;\n });\n \n function putToParent(o: TTreeItem<T>): void {\n const parentNode = nodeMap.get(o.parentId);\n \n if (parentNode) {\n parentNode.children ??= [];\n parentNode.children.push(o);\n } else {\n o.parentId = ''; // wrong parent\n }\n }\n \n listClone.forEach(v => {\n if (v.parentId) {\n putToParent(v);\n }\n });\n \n const tree: TTreeItem<T>[] = listClone.filter(v => !v.parentId); // All top-level nodes\n \n // 若数据有自循环,则自循环的将不会在以上得到的树里\n const flatten = treeFlatten(tree);\n \n if (flatten.length !== list.length) { // 说明有循环,循环的会游离在树之外,需要收回来\n list.forEach(v => {\n if (!flatten.find(vv => vv.id === v.id)) {\n tree.push(v);\n }\n });\n }\n \n return depth > 0 ? treeTrim(tree, depth) : tree;\n}\n"],"mappings":";AAKA,OAAOA,WAAW,MAAM,gBAAgB;AACxC,OAAOC,QAAQ,MAAM,aAAa;;AAElC;AACA;AACA;AACA,eAAe,SAASC,SAASA,CAA0BC,IAAS,EAA6B;EAAA,IAA3BC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EAC7E,IAAMG,OAAO,GAAG,IAAIC,GAAG,CAAuB,CAAC;EAC/C,IAAMC,SAAyB,GAAGP,IAAI,CAACQ,GAAG,CAAC,UAACC,CAAI,EAAK;IACnD,IAAMC,QAAsB,GAAAC,aAAA,KACvBF,CAAC,CACL;IAEDJ,OAAO,CAACO,GAAG,CAACF,QAAQ,CAACG,EAAE,EAAEH,QAAQ,CAAC;IAElC,OAAOA,QAAQ;EACjB,CAAC,CAAC;EAEF,SAASI,WAAWA,CAACC,CAAe,EAAQ;IAC1C,IAAMC,UAAU,GAAGX,OAAO,CAACY,GAAG,CAACF,CAAC,CAACG,QAAQ,CAAC;IAE1C,IAAIF,UAAU,EAAE;MAAA,IAAAG,oBAAA;MACd,CAAAA,oBAAA,GAAAH,UAAU,CAACI,QAAQ,cAAAD,oBAAA,cAAAA,oBAAA,GAAnBH,UAAU,CAACI,QAAQ,GAAK,EAAE;MAC1BJ,UAAU,CAACI,QAAQ,CAACC,IAAI,CAACN,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLA,CAAC,CAACG,QAAQ,GAAG,EAAE,CAAC,CAAC;IACnB;EACF;EAEAX,SAAS,CAACe,OAAO,CAAC,UAAAb,CAAC,EAAI;IACrB,IAAIA,CAAC,CAACS,QAAQ,EAAE;MACdJ,WAAW,CAACL,CAAC,CAAC;IAChB;EACF,CAAC,CAAC;EAEF,IAAMc,IAAoB,GAAGhB,SAAS,CAACiB,MAAM,CAAC,UAAAf,CAAC;IAAA,OAAI,CAACA,CAAC,CAACS,QAAQ;EAAA,EAAC,CAAC,CAAC;;EAEjE;EACA,IAAMO,OAAO,GAAG5B,WAAW,CAAC0B,IAAI,CAAC;EAEjC,IAAIE,OAAO,CAACtB,MAAM,KAAKH,IAAI,CAACG,MAAM,EAAE;IAAE;IACpCH,IAAI,CAACsB,OAAO,CAAC,UAAAb,CAAC,EAAI;MAChB,IAAI,CAACgB,OAAO,CAACC,IAAI,CAAC,UAAAC,EAAE;QAAA,OAAIA,EAAE,CAACd,EAAE,KAAKJ,CAAC,CAACI,EAAE;MAAA,EAAC,EAAE;QACvCU,IAAI,CAACF,IAAI,CAACZ,CAAC,CAAC;MACd;IACF,CAAC,CAAC;EACJ;EAEA,OAAOR,KAAK,GAAG,CAAC,GAAGH,QAAQ,CAACyB,IAAI,EAAEtB,KAAK,CAAC,GAAGsB,IAAI;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"tree-build.js","names":["treeFlatten","treeTrim","treeBuild","list","maxLevel","arguments","length","undefined","nodeMap","Map","listClone","map","v","treeItem","_objectSpread","set","id","putToParent","o","parentNode","get","parentId","_parentNode$children","children","push","forEach","tree","filter","flatten","find","vv"],"sources":["../../../src/helper/tree-build.ts"],"sourcesContent":["import {\n ITreeItemBase,\n TTreeItem\n} from '../types';\n\nimport treeFlatten from './tree-flatten';\nimport treeTrim from './tree-trim';\n\n/**\n * 将平铺的(已标准化 `id` 和 `parentId`)数据转成树节点列表\n */\nexport default function treeBuild<T extends ITreeItemBase>(list: T[], maxLevel = 0): TTreeItem<T>[] {\n const nodeMap = new Map<string, TTreeItem<T>>();\n const listClone: TTreeItem<T>[] = list.map((v: T) => {\n const treeItem: TTreeItem<T> = { // shallow clone\n ...v\n };\n \n nodeMap.set(treeItem.id, treeItem);\n \n return treeItem;\n });\n \n function putToParent(o: TTreeItem<T>): void {\n const parentNode = nodeMap.get(o.parentId);\n \n if (parentNode) {\n parentNode.children ??= [];\n parentNode.children.push(o);\n } else {\n o.parentId = ''; // wrong parent\n }\n }\n \n listClone.forEach(v => {\n if (v.parentId) {\n putToParent(v);\n }\n });\n \n const tree: TTreeItem<T>[] = listClone.filter(v => !v.parentId); // All top-level nodes\n \n // 若数据有自循环,则自循环的将不会在以上得到的树里\n const flatten = treeFlatten(tree);\n \n if (flatten.length !== list.length) { // 说明有循环,循环的会游离在树之外,需要收回来\n list.forEach(v => {\n if (!flatten.find(vv => vv.id === v.id)) {\n tree.push(v);\n }\n });\n }\n \n return maxLevel > 0 ? treeTrim(tree, maxLevel) : tree;\n}\n"],"mappings":";AAKA,OAAOA,WAAW,MAAM,gBAAgB;AACxC,OAAOC,QAAQ,MAAM,aAAa;;AAElC;AACA;AACA;AACA,eAAe,SAASC,SAASA,CAA0BC,IAAS,EAAgC;EAAA,IAA9BC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EAChF,IAAMG,OAAO,GAAG,IAAIC,GAAG,CAAuB,CAAC;EAC/C,IAAMC,SAAyB,GAAGP,IAAI,CAACQ,GAAG,CAAC,UAACC,CAAI,EAAK;IACnD,IAAMC,QAAsB,GAAAC,aAAA,KACvBF,CAAC,CACL;IAEDJ,OAAO,CAACO,GAAG,CAACF,QAAQ,CAACG,EAAE,EAAEH,QAAQ,CAAC;IAElC,OAAOA,QAAQ;EACjB,CAAC,CAAC;EAEF,SAASI,WAAWA,CAACC,CAAe,EAAQ;IAC1C,IAAMC,UAAU,GAAGX,OAAO,CAACY,GAAG,CAACF,CAAC,CAACG,QAAQ,CAAC;IAE1C,IAAIF,UAAU,EAAE;MAAA,IAAAG,oBAAA;MACd,CAAAA,oBAAA,GAAAH,UAAU,CAACI,QAAQ,cAAAD,oBAAA,cAAAA,oBAAA,GAAnBH,UAAU,CAACI,QAAQ,GAAK,EAAE;MAC1BJ,UAAU,CAACI,QAAQ,CAACC,IAAI,CAACN,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLA,CAAC,CAACG,QAAQ,GAAG,EAAE,CAAC,CAAC;IACnB;EACF;EAEAX,SAAS,CAACe,OAAO,CAAC,UAAAb,CAAC,EAAI;IACrB,IAAIA,CAAC,CAACS,QAAQ,EAAE;MACdJ,WAAW,CAACL,CAAC,CAAC;IAChB;EACF,CAAC,CAAC;EAEF,IAAMc,IAAoB,GAAGhB,SAAS,CAACiB,MAAM,CAAC,UAAAf,CAAC;IAAA,OAAI,CAACA,CAAC,CAACS,QAAQ;EAAA,EAAC,CAAC,CAAC;;EAEjE;EACA,IAAMO,OAAO,GAAG5B,WAAW,CAAC0B,IAAI,CAAC;EAEjC,IAAIE,OAAO,CAACtB,MAAM,KAAKH,IAAI,CAACG,MAAM,EAAE;IAAE;IACpCH,IAAI,CAACsB,OAAO,CAAC,UAAAb,CAAC,EAAI;MAChB,IAAI,CAACgB,OAAO,CAACC,IAAI,CAAC,UAAAC,EAAE;QAAA,OAAIA,EAAE,CAACd,EAAE,KAAKJ,CAAC,CAACI,EAAE;MAAA,EAAC,EAAE;QACvCU,IAAI,CAACF,IAAI,CAACZ,CAAC,CAAC;MACd;IACF,CAAC,CAAC;EACJ;EAEA,OAAOR,QAAQ,GAAG,CAAC,GAAGH,QAAQ,CAACyB,IAAI,EAAEtB,QAAQ,CAAC,GAAGsB,IAAI;AACvD","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- function treeTrimRecursive(tree, maxDepth, currentDepth) {
2
- if (currentDepth >= maxDepth) {
1
+ function treeTrimRecursive(tree, maxLevel, currentLevel) {
2
+ if (currentLevel >= maxLevel) {
3
3
  tree.forEach(function (node) {
4
4
  node.children = null;
5
5
  delete node.children;
@@ -9,19 +9,19 @@ function treeTrimRecursive(tree, maxDepth, currentDepth) {
9
9
  tree.forEach(function (node) {
10
10
  var _node$children;
11
11
  if ((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length) {
12
- treeTrimRecursive(node.children, maxDepth, currentDepth + 1);
12
+ treeTrimRecursive(node.children, maxLevel, currentLevel + 1);
13
13
  }
14
14
  });
15
15
  }
16
16
 
17
17
  /**
18
- * 修建树到最大深度(注意,此方法会直接修改原树)
18
+ * 修建树(注意,此方法会直接修改原树)
19
19
  */
20
- export default function treeTrim(tree, maxDepth) {
21
- if (maxDepth < 1) {
20
+ export default function treeTrim(tree, maxLevel) {
21
+ if (maxLevel < 1) {
22
22
  return tree;
23
23
  }
24
- treeTrimRecursive(tree, maxDepth, 0);
24
+ treeTrimRecursive(tree, maxLevel, 1);
25
25
  return tree;
26
26
  }
27
27
  //# sourceMappingURL=tree-trim.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-trim.js","names":["treeTrimRecursive","tree","maxDepth","currentDepth","forEach","node","children","_node$children","length","treeTrim"],"sources":["../../../src/helper/tree-trim.ts"],"sourcesContent":["import {\n ITreeItemBase,\n TTreeItem\n} from '../types';\n\nfunction treeTrimRecursive<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxDepth: number, currentDepth: number): void {\n if (currentDepth >= maxDepth) {\n tree.forEach(node => {\n node.children = null;\n delete node.children;\n });\n \n return;\n }\n \n tree.forEach(node => {\n if (node.children?.length) {\n treeTrimRecursive(node.children, maxDepth, currentDepth + 1);\n }\n });\n}\n\n/**\n * 修建树到最大深度(注意,此方法会直接修改原树)\n */\nexport default function treeTrim<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxDepth: number): TTreeItem<T>[] {\n if (maxDepth < 1) {\n return tree;\n }\n \n treeTrimRecursive(tree, maxDepth, 0);\n \n return tree;\n}\n"],"mappings":"AAKA,SAASA,iBAAiBA,CAA0BC,IAAoB,EAAEC,QAAgB,EAAEC,YAAoB,EAAQ;EACtH,IAAIA,YAAY,IAAID,QAAQ,EAAE;IAC5BD,IAAI,CAACG,OAAO,CAAC,UAAAC,IAAI,EAAI;MACnBA,IAAI,CAACC,QAAQ,GAAG,IAAI;MACpB,OAAOD,IAAI,CAACC,QAAQ;IACtB,CAAC,CAAC;IAEF;EACF;EAEAL,IAAI,CAACG,OAAO,CAAC,UAAAC,IAAI,EAAI;IAAA,IAAAE,cAAA;IACnB,KAAAA,cAAA,GAAIF,IAAI,CAACC,QAAQ,cAAAC,cAAA,eAAbA,cAAA,CAAeC,MAAM,EAAE;MACzBR,iBAAiB,CAACK,IAAI,CAACC,QAAQ,EAAEJ,QAAQ,EAAEC,YAAY,GAAG,CAAC,CAAC;IAC9D;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,eAAe,SAASM,QAAQA,CAA0BR,IAAoB,EAAEC,QAAgB,EAAkB;EAChH,IAAIA,QAAQ,GAAG,CAAC,EAAE;IAChB,OAAOD,IAAI;EACb;EAEAD,iBAAiB,CAACC,IAAI,EAAEC,QAAQ,EAAE,CAAC,CAAC;EAEpC,OAAOD,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"file":"tree-trim.js","names":["treeTrimRecursive","tree","maxLevel","currentLevel","forEach","node","children","_node$children","length","treeTrim"],"sources":["../../../src/helper/tree-trim.ts"],"sourcesContent":["import {\n ITreeItemBase,\n TTreeItem\n} from '../types';\n\nfunction treeTrimRecursive<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxLevel: number, currentLevel: number): void {\n if (currentLevel >= maxLevel) {\n tree.forEach(node => {\n node.children = null;\n delete node.children;\n });\n \n return;\n }\n \n tree.forEach(node => {\n if (node.children?.length) {\n treeTrimRecursive(node.children, maxLevel, currentLevel + 1);\n }\n });\n}\n\n/**\n * 修建树(注意,此方法会直接修改原树)\n */\nexport default function treeTrim<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxLevel: number): TTreeItem<T>[] {\n if (maxLevel < 1) {\n return tree;\n }\n \n treeTrimRecursive(tree, maxLevel, 1);\n \n return tree;\n}\n"],"mappings":"AAKA,SAASA,iBAAiBA,CAA0BC,IAAoB,EAAEC,QAAgB,EAAEC,YAAoB,EAAQ;EACtH,IAAIA,YAAY,IAAID,QAAQ,EAAE;IAC5BD,IAAI,CAACG,OAAO,CAAC,UAAAC,IAAI,EAAI;MACnBA,IAAI,CAACC,QAAQ,GAAG,IAAI;MACpB,OAAOD,IAAI,CAACC,QAAQ;IACtB,CAAC,CAAC;IAEF;EACF;EAEAL,IAAI,CAACG,OAAO,CAAC,UAAAC,IAAI,EAAI;IAAA,IAAAE,cAAA;IACnB,KAAAA,cAAA,GAAIF,IAAI,CAACC,QAAQ,cAAAC,cAAA,eAAbA,cAAA,CAAeC,MAAM,EAAE;MACzBR,iBAAiB,CAACK,IAAI,CAACC,QAAQ,EAAEJ,QAAQ,EAAEC,YAAY,GAAG,CAAC,CAAC;IAC9D;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,eAAe,SAASM,QAAQA,CAA0BR,IAAoB,EAAEC,QAAgB,EAAkB;EAChH,IAAIA,QAAQ,GAAG,CAAC,EAAE;IAChB,OAAOD,IAAI;EACb;EAEAD,iBAAiB,CAACC,IAAI,EAAEC,QAAQ,EAAE,CAAC,CAAC;EAEpC,OAAOD,IAAI;AACb","ignoreList":[]}
@@ -2,4 +2,4 @@ import { ITreeItemBase, TTreeItem } from '../types';
2
2
  /**
3
3
  * 将平铺的(已标准化 `id` 和 `parentId`)数据转成树节点列表
4
4
  */
5
- export default function treeBuild<T extends ITreeItemBase>(list: T[], depth?: number): TTreeItem<T>[];
5
+ export default function treeBuild<T extends ITreeItemBase>(list: T[], maxLevel?: number): TTreeItem<T>[];
@@ -1,5 +1,5 @@
1
1
  import { ITreeItemBase, TTreeItem } from '../types';
2
2
  /**
3
- * 修建树到最大深度(注意,此方法会直接修改原树)
3
+ * 修建树(注意,此方法会直接修改原树)
4
4
  */
5
- export default function treeTrim<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxDepth: number): TTreeItem<T>[];
5
+ export default function treeTrim<T extends ITreeItemBase>(tree: TTreeItem<T>[], maxLevel: number): TTreeItem<T>[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kcuf/helper-tree",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "The tree data helper.",
5
5
  "keywords": [],
6
6
  "license": "MIT",