UNPKG

haha-dict-tree

Version:

因为最近常用到字典树,所以自己封装一个易用的字典树库。 代码量很少,90行,使用 generator 来遍历字典树,写起来很舒服。

166 lines (131 loc) 2.96 kB
#README 因为最近常用到字典树,所以自己封装一个易用的字典树库。 代码量很少,90行,使用 generator 来遍历字典树,写起来很舒服。 ## install 基本上我写的库如果有重名的,都会加上 haha,😆。 ```bash npm install haha-dict-tree --save ``` ## quick start 实现一个按搜索热度排序拥有相同前缀的功能。 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('你'); t.addWord('你好');// 每次搜索添加一次 t.addWord('你好'); t.addWord('你好啊'); t.addWord('你好啊'); t.addWord('你好啊'); t.addWord('测试'); t.addWord('测试'); t.addWord('测试'); const result = []; for (let n of t.findAfter('你')) { result.push(n); } result.sort((a, b) => b.number - a.number).map(n => console.log(n.word, n.number)); // 你好啊 4 // 你好 3 // 你 2 ``` ## API ### Tree ``` const Tree = require('haha-dict-tree'); const t = new Tree(); ``` ### Node - *char* 节点字符 - *word* 节点字符串 - *deep* 节点深度 - *number* 节点热度 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('12'); for(let n of t.findAfter('1')) { console.log(n); } // Node { // char: '2', // word: '12', // isWord: true, // deep: 2, // number: 1, // nextMap: Map {} } ``` #### Tree.addWord(word) - *word* String 添加字符串 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('123'); ``` #### Tree.findAllRaw(word) - *word* String 查询字符串,返回遍历路径。 路径长度比查询字符串小时候,按照字符串查询。 路径长度大于字符串长度的时候,广度遍历接下来的节点。 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('1234'); for(let n of t.findAllRaw('1')) { console.log(n.word); } // result: // 1 // 12 // 123 // 1234 ``` ### Tree.findAll(word) - *word* String 对 findAllRaw 包装了一层,只返回拥有添加字符串的节点,而不是所有经过节点。 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('1234'); t.addWord('12'); for(let n of t.findAllRaw('1')) { console.log(n.word); } // result: // 12 // 1234 ``` ### Tree.findBefore(word) - *word* String 对 findAll包装了一层,返回长度小于等于查询字符串的完整字符串节点。 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('1234'); t.addWord('12'); t.addWord('1'); for(let n of t.findAllRaw('123')) { console.log(n.word); } // result: // 1 // 12 ``` ### Tree.findBefore(word) - *word* String 对 findAll包装了一层,返回长度大于等于查询字符串的完整字符串节点。 ```js const Tree = require('haha-dict-tree'); const t = new Tree(); t.addWord('12345'); t.addWord('1234'); t.addWord('12'); t.addWord('1'); for(let n of t.findAllRaw('123')) { console.log(n.word); } // result: // 1234 // 12345 ```