首页 > 解决方案 > add 不是函数

问题描述

我不知道为什么会出现此错误,我正在使用来自 github 的 trie.js 并尝试使用 add 函数,但它说 trie.add 不是函数。

var longestWord = function(words) {
    console.log('test');
    let trie = new Trie();
    trie.add("test");
    console.log(trie);
};


longestWord('testing');

function Trie() {
    this.head = {
            key : ''
        , children: {}
    }
}

Trie.prototype.add = function(key) {

    var curNode = this.head
        , newNode = null
        , curChar = key.slice(0,1);

    key = key.slice(1);
    
    while(typeof curNode.children[curChar] !== "undefined" 
        && curChar.length > 0){
        curNode = curNode.children[curChar];
        curChar = key.slice(0,1);
        key = key.slice(1);
    }

    while(curChar.length > 0) {
        newNode = {
                key : curChar
            , value : key.length === 0 ? null : undefined
            , children : {}
        };

        curNode.children[curChar] = newNode;

        curNode = newNode;

        curChar = key.slice(0,1);
        key = key.slice(1);
    }

};

Trie.prototype.search = function(key) {
    var curNode = this.head
        , curChar = key.slice(0,1)
        , d = 0;

    key = key.slice(1);

    while(typeof curNode.children[curChar] !== "undefined" && curChar.length > 0){
        curNode = curNode.children[curChar];
        curChar = key.slice(0,1);
        key = key.slice(1);
        d += 1;
    }

    if (curNode.value === null && key.length === 0) {
        return d;
    } else {
        return -1;
    }

}

Trie.prototype.remove = function(key) {
    var d = this.search(key);
    if (d > -1){
        removeH(this.head, key, d);
    }
}

function removeH(node, key, depth) {
    if (depth === 0 && Object.keys(node.children).length === 0){
        return true;
    } 

    var curChar = key.slice(0,1);

    if (removeH(node.children[curChar], key.slice(1), depth-1)) {
        delete node.children[curChar];
        if (Object.keys(node.children).length === 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

我自己添加的所有代码都在函数 Trie() 之前。其余部分来自此 github 存储库:https ://gist.github.com/alexandervasyuk/b12c3d2c306539decb2a#file-trie-js

标签: javascriptfunctiontrie

解决方案


在向它添加原型之前,您正在调用 new Trie。

这是工作版本:

https://jsbin.com/jokekuw/3/edit?js,输出

var longestWord = function(words) {
    console.log('test');
    let trie = new Trie();
    trie.add("test");
};

function Trie() {
    this.head = {
            key : ''
        , children: {}
    }
}

推荐阅读