在此kata中,您需要给定一个字符串,将每个字母替换为其在字母表中的位置。
如果文本中的任何内容都不是字母,请忽略它,不要返回它。
“ a” = 1,“ b” = 2,依此类推。
示例
alphabet_position("The sunset sets at twelve o' clock.")
应返回"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 alphabet = {
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 number = 0;
var string = "";
var letter = "";
for (i = 0; i < text.length; i++) {
letter = text.charAt(i);
number = alphabet.letter;
string += number + " ";
}
return string;
}
var res = alphabetPosition("The sunset sets at twelve o' clock.");
console.log(res, res === "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");
答案 0 :(得分:1)
尝试关注
alphabet.letter
应该为alphabet[letter.toLowerCase()]
-忽略大小写if(number)
function alphabetPosition(text) {
var alphabet = {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 number = 0;
var string = "";
var letter ="";
for (i=0; i<text.length; i++) {
letter = text.charAt(i);
number = alphabet[letter.toLowerCase()];
if(number) string += number + " ";
}
return string;
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
答案 1 :(得分:1)
您的代码中有一些错误。请按照以下步骤解决问题。
toLowerCase()
方法也可以转换upper case
个字母。
function alphabetPosition(text) {
var alphabet ={
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 number = 0;
var string = "";
var letter ="";
for (i=0; i< text.length; i++) {
letter = text.charAt(i).toLowerCase();
number = alphabet[letter] || '';
string += number + " ";
}
return string;
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."))
此外,您可以使用map
方法来简化方法。
return text.split('').map(c => alphabet[c.toLowerCase()] || '').join(' ');
答案 2 :(得分:0)
如果您认为每个字母的索引是其ascii / utf-16代码减去97(字母“ a”的ascii代码)加1(因为您的字母以1而不是1)开头,则可以完全跳过该对象0)。所以您可以这样解决:
function alphabetPosition(text) {
var str = "";
for (i = 0; i < text.length; i++) {
var c = text.charAt(i).toLowerCase();
var code = c.charCodeAt(0);
if (code >= 97 && code <= 122) str += ((code - 97 + 1) + " ")
}
return str;
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
答案 3 :(得分:0)
使用ASCII码,您的代码将不需要字母数组
var str = "The sunset sets at twelve o' clock.";
function CharToAsciiConversion(str){
var result = "";
str = str.toLowerCase();
for (var i = 0; i < str.length; i++) {
var ascii = str.charCodeAt(i) - 96;
if(ascii > 0 && ascii < 26)
result += ascii + " ";
}
return result;
}
console.log(CharToAsciiConversion(str));
答案 4 :(得分:0)
您的代码有问题:将对象属性名称存储在变量中时,应使用[]
表示法访问属性值。在您的示例中,您有alphabet.letter
,应该是alphabet[letter]
function alphabetPosition(text) {
var alphabet = {
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 number = 0;
var string = "";
var letter = "";
for (i = 0; i < text.length; i++) {
letter = text.charAt(i).toLowerCase();
number = alphabet[letter];
if (typeof number !== 'undefined') {
string += number + " ";
}
}
return string.trim();
}
var res = alphabetPosition("The sunset sets at twelve o' clock.");
console.log(res, res === "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");