+1
-1
| { | ||
| "name": "tree-tool", | ||
| "version": "1.1.1", | ||
| "version": "1.1.2", | ||
| "description": "为Javascript操作树结构数据提供的一些便捷接口", | ||
@@ -5,0 +5,0 @@ "scripts": { |
+24
-16
| ## JS树结构数据处理工具 | ||
| ## 一、简介 | ||
| tree-tool是一个用于处理js树结构的一些函数,无任何依赖,体积非常小,仅有3KB。 | ||
| tree-tool是一个用于处理js树结构的一些函数,无任何依赖,体积非常小。 | ||
@@ -29,15 +29,15 @@ 其实代码本身很简单,但是因为问我的同学太多了,加之我在好几个项目需要用到几乎完全相同的代码,我就写了些非常通用的函数收集在这个库里。 | ||
| ### API说明 | ||
| | 功能 | API | 备注 | | ||
| | ---- | :----: | :----: | | ||
| | 列表结构转树结构 | treeTool.fromList(list[, config]) | | | ||
| | 树结构转列表结构 | treeTool.toList(tree[, config] ) | | | ||
| | 查找符合条件的单个节点 | treeTool.findNode(tree, callback[, config]) | 返回广度优先遍历查找到的第一个符合条件(callback(node)为true)的节点,没有则返回null | | ||
| | 查找符合条件的所有节点 | treeTool.findNodeAll(tree, callback[, config]) | | | ||
| | 查找符合条件的单个节点的路径 | treeTool.findPath(tree, callback[, config]) | 返回符合条件(callback(node)为true)的节点的所有祖先节点有序组成的数组,没有找到节点则返回null | | ||
| | 查找符合条件的所有节点的路径 | treeTool.findPathAll(tree, callback[, config]) | 返回符合条件(callback(node)为true)的节点路径组成的数组 | | ||
| | 树结构筛选 | treeTool.filter(tree, callback[, config]) | 返回符合筛选条件(callback(node)为true)的树节点构成的树,一个节点符合条件,其祖先节点也会被保留返回 | | ||
| | 树结构遍历 | treeTool.forEach(tree, callback[, config]) | 对于所有节点node调用callback(node),深度优先 | | ||
| | 在指定oldNode前插入newNode | treeTool.insertBefore (tree, newNode, oldNode[, config]) { | 如果树中没有oldNode,则不会改变原数组。注意oldNode和newNode的参数顺序,和它们在树中的顺序一致 | | ||
| | 在指定oldNode后插入newNode | treeTool.insertAfter (tree, oldNode, newNode[, config]) { | 如果树中没有oldNode,则不会改变原数组。注意oldNode和newNode的参数顺序,和它们在树中的顺序一致 | | ||
| | 创建闭包了配置项config的实例 | treeTool.createInstance(config) | 为了避免每个函数都传入config参数,你可以使用该API创建一个实例,以上所有API可以当成实例方法使用 | | ||
| | 功能 | API | 用到的config配置项 | 备注 | | ||
| | ---- | :----: | :----: | :----: | | ||
| | 列表结构转树结构 | treeTool.fromList(list[, config]) | id、pid、children | | | ||
| | 树结构转列表结构 | treeTool.toList(tree[, config] ) | children | | | ||
| | 查找符合条件的单个节点 | treeTool.findNode(tree, callback[, config]) | children | 返回广度优先遍历查找到的第一个符合条件(callback(node)为true)的节点,没有则返回null | | ||
| | 查找符合条件的所有节点 | treeTool.findNodeAll(tree, callback[, config]) | children | | | ||
| | 查找符合条件的单个节点的路径 | treeTool.findPath(tree, callback[, config]) | children| 返回符合条件(callback(node)为true)的节点的所有祖先节点有序组成的数组,没有找到节点则返回null | | ||
| | 查找符合条件的所有节点的路径 | treeTool.findPathAll(tree, callback[, config]) | children | 返回符合条件(callback(node)为true)的节点路径组成的数组 | | ||
| | 树结构筛选 | treeTool.filter(tree, callback[, config]) | children | 返回符合筛选条件(callback(node)为true)的树节点构成的树,一个节点符合条件,其祖先节点也会被保留返回 | | ||
| | 树结构遍历 | treeTool.forEach(tree, callback[, config]) | children | 对于所有节点node调用callback(node),深度优先 | | ||
| | 在指定oldNode前插入newNode | treeTool.insertBefore (tree, newNode, oldNode[, config]) | children | 如果树中没有oldNode,则不会改变原数组。注意oldNode和newNode的参数顺序,和它们在树中的顺序一致 | | ||
| | 在指定oldNode后插入newNode | treeTool.insertAfter (tree, oldNode, newNode[, config]) | children | 如果树中没有oldNode,则不会改变原数组。注意oldNode和newNode的参数顺序,和它们在树中的顺序一致 | | ||
| | 创建闭包了配置项config的实例 | treeTool.createInstance(config) | 无 | 为了避免每个函数都传入config参数,你可以使用该API创建一个实例,以上所有API可以当成实例方法使用 | | ||
@@ -91,3 +91,3 @@ 参数说明: | ||
| #### 3. callback 回调函数,接收node参数,在查找、筛选等功能中表示约束条件,在遍历功能中则为对每个节点的操作。 | ||
| #### 4. config 可选,用于自定义node节点的唯一标识、父节点、子节点的属性名称,默认值如下(可只定义其中某几个) | ||
| #### 4. config 可选,用于自定义node节点的唯一标识、父节点、子节点的属性名称,如果接口用到的config配置项与默认不同,需要通过config参数来自定义不同的部分。默认值如下: | ||
| ```js | ||
@@ -172,8 +172,16 @@ { | ||
| // 创建一个实例,因为数据里的pid属性名与默认值不同,所以需要传递该配置项 | ||
| const instance = tree.createInstance({ pid: 'parentId' }) | ||
| // 列表结构转树 | ||
| // 列表转树 不创建实例 | ||
| function testFromList () { | ||
| const list = getList() | ||
| const tree = tree.fromList(list, { pid: 'parentId' }) | ||
| console.log(JSON.stringify(tree, null, 2)) | ||
| } | ||
| // 列表结构转树 使用instance | ||
| function testFromList () { | ||
| const list = getList() | ||
| const tree = instance.fromList(list) | ||
@@ -180,0 +188,0 @@ console.log(JSON.stringify(tree, null, 2)) |
13634
3.24%290
2.84%