JavaScript模块模式会产生意外结果

时间:2016-04-20 20:05:20

标签: javascript module-pattern

我只是在JS中生成随机人名。我也想练习使用模块模式,但我不能让我的函数返回普通数组。

我想要保存的是一封字母(或一组字母)出现在另一封信后的频率。

所以使用' jacob'和' jarod'我应该看到这封信' a'在这封信之后出现了' j'像这样2次:myArray [j] [a] // 2

但是我所拥有的却以某种方式将数组变成了一组属性并且弄清楚了这一点' a'出现2次我必须这样检查:myArray.j.a // 2

有人可以解释为什么会这样,以及我如何解决它?

var names = ['jacob', 'cameron', 'zach', 'lake', 'zander', 'casey', 'carl', 'jeff', 'jack', 'jarod', 'max', 'cat', 'mallory', 'dana', 'hannah', 'stu', 'abrham', 'isaac'];

var probabilities = (function(){
    var nextLetterProbability = [];

    function addProbability(index, letters){
        if(nextLetterProbability[index] !== undefined){
            if(nextLetterProbability[index][letters] !== undefined){
                nextLetterProbability[index][letters] = nextLetterProbability[index][letters] + 1;
            }
            else
                nextLetterProbability[index][letters] = 1;
        }
        else{
            nextLetterProbability[index] = [];
            nextLetterProbability[index][letters] = 1;
        }
    }

    return {
        learn:function(names, chainLength){
            for (var i = 0; i < names.length; i++) {
                var name = names[i];
                for (var j = 0; j < name.length - chainLength; j++) {
                    var start = name[j];
                    var next = name.slice(j + 1, j + chainLength + 1)
                    addProbability(start, next);
                };
            };
        },
        getLearnedArray:function(){
            return nextLetterProbability;
        }
    }

})();

1 个答案:

答案 0 :(得分:0)

var nextLetterProbability = [];需要是var nextLetterProbability = {};因为它是一个关联数组,并作为一个对象处理。