An example of radix tree (not space optimized)
A simple (not space optimized) radix tree example
const { add, get, del, keys } = require('./src');
let root = {};
root = add('test', 'value', root);
get('test', root);
'value'
root = del('test', root);
keys('te', root)
console.log(suggests)
['test', 'testa', 'tester']
Prepare a set of functional helpers
const curry2 = fn => a => b => fn(a,b)
const map = (fn, data) => data.map(fn)
const nthArg = (pos) => (...args) => args[pos]
const compose = (g, f) => (...args) => g(f.apply(null, args))
const flip = (fn) => (...args) => fn.apply(fn, args.slice().reverse())
const assoc = (key, value, data) => Object.assign({}, {[key]:value}, data)
const converge = (fn, paths) => (...args) => fn.apply(null, paths.map((fn) => fn.apply(null, args)))
const zipObj = (keys, values) => keys.reduce((memo, item, pos) => assoc(item, values[pos], memo), {})
const allKeys = curry2(keys)('');
allKeys(root);
['test', 'testa']
const values = converge(map, [compose(curry2(flip(get)), nthArg(1)), keys])
values('te', root)
['value', 'value2']
const all = converge(zipObj, [keys, values])
all('te', root)
{ testa: 'value2', test: 'value' }