Search code examples
javascriptmodule-pattern

JavaScript module pattern gives unexpected results


I am just messing around with generating random human names in JS. I wanted to also practice using the module pattern but I can't get my function to return a normal array.

What I want to save is how often a letter (or set of letters) shows up after another letter.

So with 'jacob' and 'jarod' I should see that the letter 'a' came after the letter 'j' 2 times like this: myArray[j][a] //2

BUT what I have instead somehow turned the array into a set of properties and to figure out that 'a' comes up 2 times I have to check it this way : myArray.j.a //2

can someone explain why this is and how I can fix it?

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;
        }
    }

})();

Solution

  • var nextLetterProbability = []; needed to be var nextLetterProbability = {}; because it is an associative array and is handled as an object.