javascript - 将字符串转换为数字字符串,表示每个字母在字母表中的位置 ('a' 为 1, 'z' 为 26)

标签 javascript

我需要创建一个函数 alphabetIndexer,它将一个字符串作为参数并返回一个数字字符串,表示每个字母在字母表中的位置('a' 是 1,'z' 是 26)。如果字符是大写,则将其位置乘以 2。字符串中所有非字母的字符都应被忽略。

function alphabetIndexer(str){
    let alphabet = 'abcdefghigklmnopqrstuvwxyz';
    let arr = [];
    for(let i = 0; i < str.length; i++){
        if(alphabet.includes(str[i].toLowerCase())){
            if(str[i] === str[i].toUpperCase()){
                arr.push(alphabet.indexOf((str[i] +1)*2))
            } else {
            arr.push(alphabet.indexOf(str[i]) +1);
            }
        }
    }
            return arr.join(' ');
}

我不能得到大写字母位置乘以2;

在测试用例“Hello World”中,它应该返回“16 5 12 12 15 46 15 17 12 4” 但是我的函数返回 [ -1, 5, 12, 12, 15, -1, 15, 18, 12, 4 ]

最佳答案

您的开端不错,只是括号错了。这:

arr.push(alphabet.indexOf((str[i] +1)*2))

应该是

arr.push((alphabet.indexOf(str[i]) +1)*2)

如果:

  • 你输入str[i]在变量中而不是每次都查找它
  • 运算符周围使用的空间

:-)

即:

arr.push((alphabet.indexOf(ch) + 1) * 2)

第二个问题是你只做 toLowerCaseincludes 时的事情检查但不要稍后再做 indexOf .你需要在你浏览的所有三个地方都这样做 alphabet :

function alphabetIndexer(str) {
  let alphabet = 'abcdefghigklmnopqrstuvwxyz';
  let arr = [];
  for (let i = 0; i < str.length; i++) {
    if (alphabet.includes(str[i].toLowerCase())) {
      if (str[i] === str[i].toUpperCase()) {
        arr.push((alphabet.indexOf(str[i].toLowerCase()) + 1) * 2); // ***
      } else {
        arr.push(alphabet.indexOf(str[i].toLowerCase()) + 1);       // ***
      }
    }
  }
  return arr.join(' ');
}
console.log(alphabetIndexer("Hi there"));

就其值(value)而言,以下是我要进行的一些小改动(不改变您的总体方法):

"use strict";
function alphabetIndexer(str) {
  let alphabet = 'abcdefghigklmnopqrstuvwxyz';
  let arr = [];
  for (let ch of str) { // Strings are iterable
    // Only search `alphabet` once
    let index = alphabet.indexOf(ch.toLowerCase());
    if (index !== -1) {
      if (ch === ch.toUpperCase()) {
        arr.push((index + 1) * 2);
      } else {
        arr.push(index + 1);
      }
    }
  }
  return arr.join(' ');
}
console.log(alphabetIndexer("Hi there"));

您也可以考虑使用 const对于“变量”,您永远不会更改(有趣的是,这就是该代码中的所有变量;更改 arr状态并不会更改变量 arr 的内容)。

关于javascript - 将字符串转换为数字字符串,表示每个字母在字母表中的位置 ('a' 为 1, 'z' 为 26),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50888155/

相关文章:

javascript - 在 Javascript 中构建动态链接

javascript - 有人对 Spark AR 中的 TouchGestures 有疑问吗?

javascript - 在 JavaScript 中解压缩 Gzip 缓冲区

javascript - 检查 contenteditable div 的输入是否为数字

javascript - 在弹出窗口中设置标题

javascript - 在打开新标签页时触发 Chrome 扩展程序

javascript - 如何向 ExtJS 4 表单中的所有字段 (textField) 添加 onChange 方法

javascript - Twilio 找出哪个用户加入了房间

javascript - 拖放(Dragger 事件)防止 onclick

javascript - 使用 AngularJs - Angular Material 或 Jquery 显示窗口模板