首页 > 解决方案 > 使用字典将字母数组重写为数字

问题描述

例子:

“你好” => 0.1.2.2.3

“javaAscript”=> 0.1.2.1.3.4.5.6.7.8

“hippopotomonstrosesQuippedaliophobia” => 0.1.2.2.3.2.3.4.3.5.3.6.7.4.8.3.7.9.7.10.11.1.2.2.9.12.13.14.1.3.2.0.3.15.1.13

我的非工作代码:


function wordPattern(word) {
  var res = []
  var dic = []
  var count = 0
  var pipa = word.toLowerCase().split("")

  for (i=0;i<pipa.length;i++) {
    if (!dic.includes(pipa[i])) {
      dic.push({key:   count, value: pipa[i]});
      count ++
  }
    for (j=0;j<pipa.length;j++) {
      res.push(dic.key[pipa[i]])
    }
    return res.join("."); 
}

提前致谢

标签: javascript

解决方案


要将字符与数字相关联,请不要使用数组,请使用对象:

function wordPattern(word) {
  const numbersByChar = {};
  let i = 0;
  return [...word]
    .map(char => numbersByChar[char] ?? (numbersByChar[char] = i++))
    .join('.');
}

console.log(wordPattern('hello'));
console.log(wordPattern('hippopotomonstrosesquippedaliophobia'));

或者没有您可能会发现更具可读性的简洁语法

function wordPattern(word) {
  const numbersByChar = {};
  let i = 0;
  return Array.from(word)
    .map((char) => {
      if (numbersByChar[char] === undefined) {
        numbersByChar[char] = i;
        i++;
      }
      return numbersByChar[char];
    })
    .join('.');
}

console.log(wordPattern('hello'));
console.log(wordPattern('hippopotomonstrosesquippedaliophobia'));


推荐阅读