Шаблон модуля JavaScript дает неожиданные результаты
Я просто возился с генерацией случайных человеческих имен в JS. Я также хотел попрактиковаться в использовании шаблона модуля, но не могу заставить свою функцию возвращать обычный массив.
Я хочу сохранить то, как часто буква (или набор букв) появляется после другой буквы.
Так что с 'jacob' и 'jarod' я должен видеть, что буква 'a' следует после буквы 'j' 2 раза так: myArray[j][a] //2
Но то, что я вместо этого каким-то образом превратил массив в набор свойств, и чтобы выяснить, что "a" появляется 2 раза, я должен проверить это следующим образом: myArray.ja //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 ответ
var nextLetterProbability = []; должен быть var nextLetterProbability = {}; потому что это ассоциативный массив и обрабатывается как объект.