#README
因为最近常用到字典树,所以自己封装一个易用的字典树库。
代码量很少,90行,使用 generator 来遍历字典树,写起来很舒服。
install
基本上我写的库如果有重名的,都会加上 haha,😆。
npm install haha-dict-tree --save
quick start
实现一个按搜索热度排序拥有相同前缀的功能。
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));
API
Tree
const Tree = require('haha-dict-tree');
const t = new Tree();
Node
- char 节点字符
- word 节点字符串
- deep 节点深度
- number 节点热度
const Tree = require('haha-dict-tree');
const t = new Tree();
t.addWord('12');
for(let n of t.findAfter('1')) {
console.log(n);
}
Tree.addWord(word)
添加字符串
const Tree = require('haha-dict-tree');
const t = new Tree();
t.addWord('123');
Tree.findAllRaw(word)
查询字符串,返回遍历路径。
路径长度比查询字符串小时候,按照字符串查询。
路径长度大于字符串长度的时候,广度遍历接下来的节点。
const Tree = require('haha-dict-tree');
const t = new Tree();
t.addWord('1234');
for(let n of t.findAllRaw('1')) {
console.log(n.word);
}
Tree.findAll(word)
对 findAllRaw 包装了一层,只返回拥有添加字符串的节点,而不是所有经过节点。
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);
}
Tree.findBefore(word)
对 findAll包装了一层,返回长度小于等于查询字符串的完整字符串节点。
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);
}
Tree.findBefore(word)
对 findAll包装了一层,返回长度大于等于查询字符串的完整字符串节点。
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);
}