当我开始时,这看起来相当简单,但出于某种原因,每当我尝试在代码大战上运行结果时,我都会得到一个空数组。我希望你能帮助我找出问题所在。
function alphabetPosition(text) {
text.split(' ').join('');
var chari = "";
var arr = [];
var alphabet = "abcdefghijklmnopqrstuvwxyz".split('');
for(var i = 0; i < text.len; i++){
chari = text.charAt(i).toLowerCase();
if(alphabet.indexOf(chari) > -1){
arr.push(alphabet.indexOf(chari));
}
}
return arr;
}
console.log(alphabetPosition("Hello World"));
&#13;
我的想法是从参数中获取文本然后去掉空格。我为我的空数组创建了一个变量,然后创建一个字母字符串,我可以稍后搜索。在for循环中,我将每个字符设置为小写,如果在字母字符串中找到该字符,则其位置将被推入数组(arr)。我很感激你的时间。
答案 0 :(得分:7)
Kata适用于此代码。试试这个:
function alphabetPosition(text) {
var result = "";
for (var i = 0; i < text.length; i++) {
var code = text.toUpperCase().charCodeAt(i)
if (code > 64 && code < 91) result += (code - 64) + " ";
}
return result.slice(0, result.length - 1);
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
&#13;
答案 1 :(得分:4)
您需要String#length
属性
text.length
而不是text.len
。
function alphabetPosition(text) {
var chari,
arr = [],
alphabet = "abcdefghijklmnopqrstuvwxyz",
i;
for (var i = 0; i < text.length; i++){
chari = text[i].toLowerCase();
if (alphabet.indexOf(chari) !== -1){
arr.push(alphabet.indexOf(chari));
}
}
return arr;
}
console.log(alphabetPosition("Hello World!!1"));
使用ES6的解决方案
function alphabetPosition(text) {
return [...text].map(a => parseInt(a, 36) - 10).filter(a => a >= 0);
}
console.log(alphabetPosition("Hello World!!1"));
答案 2 :(得分:3)
首先:删除空格
第二:用字母排名来映射每个字符
第三:用字符串新年快乐
var alphabet = "abcdefghijklmnopqrstuvwxyz".split('');
var alphabetPosition = text =>
text.split('').map(x => alphabet.indexOf(x) + 1);
console.log(alphabetPosition("happy new year"));
答案 3 :(得分:1)
此示例将基于基于0的数组返回,并使用带过滤器的lambda表达式。我通过拆分传递给方法的文本来回收创建的原始字节数组。
function alphabetPosition(text) {
var bytes = text.split('');
var alphabet = "abcdefghijklmnopqrstuvwxyz".split('');
for (var i = 0, len = text.length; i < len; i++) {
bytes[i] = alphabet.indexOf(bytes[i].toLowerCase());
}
return bytes.filter(n => { if(n > -1) return n; } ).join(' ');
}
console.log(alphabetPosition("Hello World"));
对于基于1的数组结果Kata Codewars Friendly
function alphabetPosition(text) {
var bytes = text.split('');
var alphabet = "abcdefghijklmnopqrstuvwxyz".split('');
for (var i = 0, len = text.length; i < len; i++) {
bytes[i] = alphabet.indexOf(bytes[i].toLowerCase()) + 1;
}
return bytes.filter(n => { if(n > 0) return n; } ).join(' ');
}
console.log(alphabetPosition("Hello World"));
答案 4 :(得分:1)
function alphabetPosition(text) {
const words = text.toLowerCase().replace(/[^a-z]/g,"");
return [...words].map(v=> v.charCodeAt() - 96);
}
首先我们使用text.toLowerCase()
将文本转换成小写以去除大写字母,然后我们使用.replace(/[^a-z]/g,"")
将所有非a-z字符替换为空。
下一步是使用 [...words]
将字符串展开成一个数组,然后将其映射以获取每个 a-z 字符的 ascii 字符代码。
由于 a = 97 和 b = 98 等,我们将减去 96,得到 a = 1 和 b = 2 等(字母在字母表中的位置)
答案 5 :(得分:0)
将len
更改为length
:
(var i = 0; i < text.len; i++)
// change to
(var i = 0; i < text.length; i++)
答案 6 :(得分:0)
通过使用acii代码,您可以更轻松。因为a
= ascii代码97,b
= 98等。并且有一个javascript函数String.charCodeAt( n )
,它返回特定函数的ascii代码。您只需要更改大写的偏移量(如果您想支持它们)。
function alphabetPosition( text ) {
var positions = [];
for ( var i = 0; i < text.length; i++ ) {
var charCode = text.charCodeAt( i );
if ( charCode >= 97 && charCode <= 122 ) {
positions.push( charCode - 96 );
} else if ( charCode >= 65 && charCode <= 90 ) { // get rid of this if you don't care about capitals
positions.push( charCode - 64 );
}
}
return positions;
}
var positions = alphabetPosition( 'Hello World' );
console.log(positions);
&#13;
结帐此工作fiddle
答案 7 :(得分:0)
您还可以使用.charCodeAt
功能:
function alphabetPosition(text) {
start = "a".charCodeAt(0);
end = "z".charCodeAt(0);
res = [];
for (var i = 0; i < text.length; i++) {
index = text.charAt(i).toLowerCase().charCodeAt(0);
if (index >= start && index <= end) {
res.push(index - start +1); // +1 assuming a is 1 instead of 0
} else {
res.push(0); // Or do w/e you like with non-characters
}
}
return res;
}
console.log(alphabetPosition("Hello World"));
&#13;
答案 8 :(得分:0)
你可以做这样的事情;
var alpha = [].reduce.call("abcdefghijklmnopqrstuvwxyz0123456789 .,!",(p,c,i) => (p[c] = i,p),{}),
str = "Happy 2017 whatever..!",
coded = [].map.call(str, c => alpha[c.toLowerCase()]);
console.log(coded);
答案 9 :(得分:0)
这是一个更短的版本,它做同样的事情:
function alphabetPosition(text){
return text.split('').map(function(character){ return character.charCodeAt(0) - 'a'.charCodeAt(0) + 1; })
}
console.log(alphabetPosition("Hello World"));
答案 10 :(得分:0)
这是我在 CodeWars 上的解决方案。完美运行;)
let alphabetPosition = (text) => {
let str = Array.from(text.toLowerCase().replace(/[^a-z]/g,''));
let arr = [];
for (let i = 0; i < str.length; i++) {
arr.push(str[i].charCodeAt() - 96);
}
return arr.join(' ');
}
答案 11 :(得分:0)
我的回答
function alphabetPosition(text) {
if (text.match(/[a-z]/gi)) { // if text is not emtpty
let justAlphabet = text.match(/[a-z]/gi).join("").toLowerCase(); //first extract characters other than letters
let alphabet = "abcdefghijklmnopqrstuvwxyz";
let a = []; // Create an empty array
for (let i = 0; i < justAlphabet.length; i++) {
a.push(alphabet.indexOf(justAlphabet[i]) + 1); //and characters index number push in this array
}
return a.join(" ");
} else {
return "";
}
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
答案 12 :(得分:0)
这个应该可以用
const lineNumberHandler = (arr) => {
const alphabet = 'abcdefghijklmnopqrstuwxyz';
return arr.map((el) => `${alphabet.indexOf(el) + 1}:${el}`);
}