用字母位置

时间:2017-01-02 12:39:47

标签: javascript arrays string

当我开始时,这看起来相当简单,但出于某种原因,每当我尝试在代码大战上运行结果时,我都会得到一个空数组。我希望你能帮助我找出问题所在。



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;
&#13;
&#13;

我的想法是从参数中获取文本然后去掉空格。我为我的空数组创建了一个变量,然后创建一个字母字符串,我可以稍后搜索。在for循环中,我将每个字符设置为小写,如果在字母字符串中找到该字符,则其位置将被推入数组(arr)。我很感激你的时间。

13 个答案:

答案 0 :(得分:7)

Kata适用于此代码。试试这个:

&#13;
&#13;
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;
&#13;
&#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代码。您只需要更改大写的偏移量(如果您想支持它们)。

&#13;
&#13;
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;
&#13;
&#13;

结帐此工作fiddle

答案 7 :(得分:0)

您还可以使用.charCodeAt功能:

&#13;
&#13;
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;
&#13;
&#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}`);
}