我正在做作业。我需要将长字符串转换为相应的字母表数字,例如a=1,...,z=26。 我需要这些函数来忽略字母表之外的任何其他内容,即不应返回它。
示例 letterPosition("日落十二点钟落下。")
应返回“20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11”(作为字符串)。
我尝试编写此内容,但不断出现错误。我什至不确定自己在做什么。
function alphabetPosition(text) {
var convertText = text.toLowerCase();
var anum = {
a: "1",
b: "2",
c: "3",
d: "4",
e: "5",
f: "6",
g: "7",
h: "8",
i: "9",
j: "10",
k: "11",
l: "12",
m: "13",
n: "14",
o: "15",
p: "16",
q: "17",
r: "18",
s: "19",
t: "20",
u: "21",
v: "22",
w: "23",
x: "24",
y: "25",
z: "26"
}
var arrayText = "";
for (var i = 0; i < convertText.length - 1; i++) {
var alpha = convertText.charAt(i);
if (alpha.match(/[a-z]/i)) {
var add = anum[alpha] + " ";
arrayText += add;
}
}
return arrayText;
}
最佳答案
首先将所有非字母字符替换为空字符串,将字母字符串转换为数组。之后,您可以使用 Array.prototype.map 将每个字符转换为其字符代码(从 a = 1 开始):
const alphabetPosition = (str) => {
const lowerAlphabeticalString = str
.toLowerCase()
.replace(/[^a-z]/g, ''); // replace all non-alphabetical characters
return [...lowerAlphabeticalString] // turn the string into an array
.map(char => char.charCodeAt() - 96) // transform each character into its code
.join(' '); // join the array by spaces so it becomes a string again
};
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
- 96
之所以存在,是因为 a
的字符代码是 97,b
的字符代码是 98,依此类推 -因此,要使 a
对应于 1
,b
对应于 2,请减去 96。
如果您愿意,您也可以使用单个正则表达式来完成此操作,但它的可读性不太好:
const alphabetPosition = (str) => str.replace(
/[^a-z]*([a-z])[^a-z]*/gi,
(_, char) => (char.toLowerCase().charCodeAt() - 96) + ' '
).trim(); // remove trailing space created by last replacement
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
关于javascript - 如何仅将长字符串中的字母转换为相应的字母数字,并用空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57846094/