如果我在循环中找到它,我如何获得多个键的值?

时间:2015-07-24 08:51:22

标签: javascript

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。

3 个答案:

答案 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')。