功能编程字典字符替换,键盘布局修复

时间:2017-07-31 17:18:59

标签: javascript functional-programming ecmascript-6

假设我们要修复写在AZERTY(或Dvorak或其他语言布局)键盘上的文本,就像它是常规的QWERTY键盘一样。我们想要替换相应的字符。

所以我们有一本字典,看起来与此相似:

const dic = {
q: a,
z: w,
}

但是对于每个角色来说,字典都很大。我正在寻找一种不使用for循环的方法,使用最新的javascript更改的优点,可能使用.replace()或.map()或你可以建议的任何东西。

1 个答案:

答案 0 :(得分:2)

由于AZERTY上的许多键位于同一位置,因此您不需要大字典:只为不同的键创建一个映射,如果不存在映射则返回输入:



const dict = {
  q: "a",
  w: "z"
  // e, r, t, y are in the same place, for example...
};

console.log(
  "qwerty".split("") // Explode the string to an array
       .map(letter => dict[letter] || letter) // Map inputs
       .join("") // output a string
);

// Generate a reverse mapping
const reverse_dict = {};
Object.keys(dict).forEach(key => reverse_dict[dict[key]] = key);

console.log(
  "azerty".split("")
       .map(letter => reverse_dict[letter] || letter)
       .join("")
);




请注意,使用箭头功能:

  1. 如果只有一个参数,则不需要在参数列表周围加括号。
  2. 如果省略函数体周围的{},则还可以省略return关键字,并且正文将返回最后一个(唯一)表达式的值(除了void参数,是一组空括号(),您可以在setTimeout)等地方看到它们。
  3. 关于const的一个常见误解是,您无法在数组或对象初始化后更新它,但事实并非如此。您可以做的是将变量分配给其他内容(例如const o = {}; o = ""