JavaScript 模块模式给出了意想不到的结果
JavaScript module pattern gives unexpected results
我只是在 JS 中随机生成人名。我也想练习使用模块模式,但我无法将函数设置为 return 普通数组。
我要保存的是一个字母(或一组字母)在另一个字母之后出现的频率。
所以对于 '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;
}
}
})();
var nextLetterProbability = [];需要是 var nextLetterProbability = {};因为它是一个关联数组并且被当作一个对象来处理。
我只是在 JS 中随机生成人名。我也想练习使用模块模式,但我无法将函数设置为 return 普通数组。
我要保存的是一个字母(或一组字母)在另一个字母之后出现的频率。
所以对于 '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;
}
}
})();
var nextLetterProbability = [];需要是 var nextLetterProbability = {};因为它是一个关联数组并且被当作一个对象来处理。