var charCodes = {
"a": ". _",
"b": "_ . . .",
"c": "_ . _ .",
"d": "_ . .",
"e": ".",
"f": ". . _ .",
"g": "_ _ .",
"h": ". . . .",
"i": ". .",
"j": ". _ _ _",
"k": "_ . _",
"l": ". _ . .",
"m": "_ _",
"n": "_ .",
"o": "_ _ _",
"p": ". _ _ .",
"q": "_ _ . _",
"r": ". _ .",
"s": ". . .",
"t": "_",
"u": ". . _",
"v": ". . . _",
"w": ". _ _",
"x": "_ . . _",
"y": "_ _ . .",
"z": ". _ _ _ _"
};
var temp;
var abc = "abcdefghi";
for(i = 0; i < abc.length; i++) {
var temp = abc[i].split(".");
for(x = 0; x < charCodes.length; i++) {
temp = charCodes[x];
}
}
console.log(temp);
我想将字符串abc转换为morse代码。 它仍然不适合我。 我已经拆分了字符串,现在尝试将它与charCodes数组匹配,这样我就可以用莫尔斯电码将字符串值转换为temp。
答案 0 :(得分:1)
您可以使用Function.prototype.call在字符串上使用Array instance methods,而不是循环。 E.g。
Array.prototype.map.call('sos', function(c){ return charCodes[c]; }).join(' ');
答案 1 :(得分:0)
添加另一个循环来迭代您尝试转换的文字。
var s = 'text to encode'
for (var x = 0; x < s.length(); x++) {
for (var i = 0; i < charCodes.length; i++) {
if (charCodes[i].indexOf(s[x]) != -1) {
temp = charCodes[i];
console.log(temp);
}
}
}
答案 2 :(得分:0)
你根本不应该遍历charCodes
字典来将字符串转换为莫尔斯代码。字典格式的要点是能够通过其键引用值。这就是abc[character]
语法的用途。
您需要做的是遍历要解码的字符串,在这种情况下为abc
,然后获取您找到的每个字符的莫尔斯代码值。您不需要拆分字符串,因为索引已经可以像数组一样引用字符串。
循环浏览时,您可以使用字符串连接将从charCodes
获得的值添加到结果变量中。当循环完成后,你将拥有一个包含莫尔斯码的长字符串。
var abc = "abcde fghi";
var result = "";
for(i = 0; i < abc.length; i++) {
if (abc[i] in charCodes){
result += charCodes[abc[i]];
} else {
//Handle non letter results here
}
}
您可以使用if (abc[i] in charCodes)
确保只尝试转换现有密钥(例如,您的charCodes
中没有定义空格)。然后决定你要如何处理它,无论是抛出错误还是添加新行(result += '\n'
)。