我的JavaScript过程有点不对劲
作为我正在创建的拼写检查算法的一部分,我编写了一个函数,该函数返回一个数组,其中包含从给定单词中替换1个字母的所有单词。字母替换必须在键盘上距离1;因此,我制作了以下地图我的JavaScript过程有点不对劲,javascript,html,Javascript,Html,作为我正在创建的拼写检查算法的一部分,我编写了一个函数,该函数返回一个数组,其中包含从给定单词中替换1个字母的所有单词。字母替换必须在键盘上距离1;因此,我制作了以下地图 var kdmap = {'a': ['q','w','s','z'], 'b': ['v','g','h','n'], 'c': ['x','d','f','v'], 'd': ['s','e','r','f','
var kdmap = {'a': ['q','w','s','z'],
'b': ['v','g','h','n'],
'c': ['x','d','f','v'],
'd': ['s','e','r','f','c','x'],
'e': ['w','s','d','r'],
'f': ['d','r','t','g','v','c'],
'g': ['f','t','y','h','b','v'],
'h': ['g','y','u','j','n','b'],
'i': ['u','h','j','i'],
'j': ['h','n','m','k','i','u','y'],
'k': ['j','i','o','l','m'],
'l': ['k','o','p'],
'm': ['n','j','k'],
'n': ['b','h','j','m'],
'o': ['i','k','l','p'],
'p': ['o','l'],
'q': ['a','w'],
'r': ['e','d','f','t'],
's': ['a','w','e','d','x','z'],
't': ['r','f','g','y'],
'u': ['y','h','j','i'],
'v': ['c','f','g','b'],
'w': ['q','a','s','e'],
'x': ['z','s','d','c'],
'y': ['t','g','h','u'],
'z': ['a','s','x']
};
在以下函数中使用
function letter_replacements(w)
{
/* Given a word w, return an array of all strings that are w
with 1 letter replaced, that letter being one which is distance
1 away on the keyboard
*/
var A = new Array();
for (var i = 0, j = w.length; i < j; ++i)
{
var thisChar = w[i];
var closeChars = kdmap[thischar];
for (var k = 0, n = closeChars.length; k < n; ++k)
A.push(w.slice(0,i)+closeChars[k]+w.slice(i+1,j))
}
return A;
}
功能字母的替换(w)
{
/*给定一个单词w,返回一个包含所有w字符串的数组
替换1个字母,该字母表示距离
在键盘上输入1
*/
var A=新数组();
对于(变量i=0,j=w.length;i
当我运行包含该代码的页面时,我的浏览器JavaScript控制台上没有错误。然而,当我创建一个小提琴来测试函数时,我没有得到任何输出
这是我的小提琴:
知道我做错了什么吗?也许你需要写一个程序来检查这个案例;) 查看控制台,您会看到错误:
uncaughtreferenceerror:thischar未定义
看看你搞乱的代码
var thisChar = w[i];
^^^
var closeChars = kdmap[thischar];
^^^
在我看来,这两行代码似乎有问题:
var thisChar = w[i];
var closeChars = kdmap[thischar];
必须是:
var thisChar = w[i];
var closeChars = kdmap[thisChar.toLowerCase()];
if (closeChars === undefined)
continue;
1) 你的外壳脱落了thisChar不是thisChar
2) 不考虑空格字符。所以closeChars可以是未定义的
3) 您必须对得到的每个字符调用toLowerCase,因为JavaScript对象中没有大写字符
我已经用一些补丁更新了你的小提琴。我将详述以下问题:
var kdmap = {'a': ['q','w','s','z'],
'b': ['v','g','h','n'],
'c': ['x','d','f','v'],
'd': ['s','e','r','f','c','x'],
'e': ['w','s','d','r'],
'f': ['d','r','t','g','v','c'],
'g': ['f','t','y','h','b','v'],
'h': ['g','y','u','j','n','b'],
'i': ['u','h','j','i'],
'j': ['h','n','m','k','i','u','y'],
'k': ['j','i','o','l','m'],
'l': ['k','o','p'],
'm': ['n','j','k'],
'n': ['b','h','j','m'],
'o': ['i','k','l','p'],
'p': ['o','l'],
'q': ['a','w'],
'r': ['e','d','f','t'],
's': ['a','w','e','d','x','z'],
't': ['r','f','g','y'],
'u': ['y','h','j','i'],
'v': ['c','f','g','b'],
'w': ['q','a','s','e'],
'x': ['z','s','d','c'],
'y': ['t','g','h','u'],
'z': ['a','s','x']
};
function letter_replacements(w) {
/* Given a word w, return an array of all strings that are w
with 1 letter replaced, that letter being one which is distance
1 away on the keyboard
*/
var A = new Array();
for (var i = 0, j = w.length; i < j; ++i)
{
var thisChar = w[i].toLowerCase();
var closeChars = kdmap[thisChar] || [];
for (var k = 0, n = closeChars.length; k < n; ++k)
A.push(w.slice(0,i)+closeChars[k]+w.slice(i+1,j))
}
return A;
}
var myWord = "Obama smokes cigarettes.";
var myArray = letter_replacements(myWord);
document.getElementById("mydiv").innerHTML = "<p>" + myArray.join('') + "</p>";
var kdmap={'a':['q','w','s','z'],
‘b’:[v’、‘g’、‘h’、‘n’],
‘c’:[‘x’、‘d’、‘f’、‘v’],
‘d’:[‘s’、‘e’、‘r’、‘f’、‘c’、‘x’],
‘e’:[w’、‘s’、‘d’、‘r’],
‘f’:[‘d’、‘r’、‘t’、‘g’、‘v’、‘c’],
‘g’:[‘f’、‘t’、‘y’、‘h’、‘b’、‘v’],
‘h’:[‘g’、‘y’、‘u’、‘j’、‘n’、‘b’],
‘i’:[u’、‘h’、‘j’、‘i’],
‘j’:[‘h’、‘n’、‘m’、‘k’、‘i’、‘u’、‘y’],
‘k’:[‘j’、‘i’、‘o’、‘l’、‘m’],
'l':['k','o','p'],
'm':['n','j','k'],
‘n’:[‘b’、‘h’、‘j’、‘m’],
‘o’:[i’、‘k’、‘l’、‘p’],
'p':['o','l'],
“q”:[a',w'],
'r':['e','d','f','t'],
's':['a','w','e','d','x','z'],
‘t’:[‘r’、‘f’、‘g’、‘y’],
‘u’:[‘y’、‘h’、‘j’、‘i’],
'v':['c','f','g','b'],
‘w’:[‘q’、‘a’、‘s’、‘e’],
'x':['z','s','d','c'],
‘y’:[‘t’、‘g’、‘h’、‘u’],
'z':['a','s','x']
};
功能字母_替换(w){
/*给定一个单词w,返回一个包含所有w字符串的数组
替换1个字母,该字母表示距离
在键盘上输入1
*/
var A=新数组();
对于(变量i=0,j=w.length;i”;
我最近看到了很多
新数组()
而不是[]
。thischar
未定义。变量名称区分大小写<代码>此字符!=thischar
closeChars
对于非字母字符将是未定义的。例如“导致错误”。@YuryTarabanko:没关系,因为在我的程序中定义的“单词”只由字母字符序列组成。