从包含符号的字符串中获取数组中的下一个键

时间:2014-10-01 19:05:43

标签: javascript arrays

我现在正在为一个简单但困难的问题工作,我在jQuery中工作,但需要在Javascript中完成。

这么简单,用户输入一个字符串就可以说: "嘿,今天想挂?"。它应该输出我的数组中的下一个字符,所以它将是这样的:" ifz,xboob iboh upebz?"。 我已经尝试了所有可以想到的东西。希望你们中的一些人马上看到问题。

我设置了一个与我得到的相似的短jsFiddle

function gen() {
var str = document.getElementById('str').value,
    output = document.getElementById('output');
var alph =  ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','æ','ø','å','a'];
for (var i=0;i<str.length;i++) {
    var index = str[i].charAt(0),
        e = alph.indexOf(index);
    console.log(alph[e + 1]); 
    output.innerHTML += alph[e + 1];
    }
}

4 个答案:

答案 0 :(得分:3)

如果您只想跳到带有这些字符的下一个字母,请将其他字母留空,?原样:

    var index = str[i].charAt(0),
        e = alph.indexOf(index);
    if(e == -1){
        output.innerHTML += index;
    }else{
        output.innerHTML += alph[e + 1];
    }

更新:使用@David Thomas方法,您可以执行以下操作:(虽然不适合'å')

var index= str[i].toLowerCase().charCodeAt(0);
    if((index > 96 && index < 123)){ // a to z
        output.innerHTML += String.fromCharCode(str[i].charCodeAt(0)+1);
    }else{
       output.innerHTML += str[i];
    }
}

答案 1 :(得分:2)

我个人推荐以下方法,该方法适用于任何具有Unicode表示的字母表,有些重要的是,不需要为每种语言使用硬编码的字母/标点符号数组:

function gen() {
    var str = document.getElementById('str').value,
        strTo = '',
        output = document.getElementById('output');
    for (var i = 0; i < str.length; i++) {
        strTo += String.fromCharCode(str[i].charCodeAt(0) + 1);
    }
    output.textContent = strTo;
}

// hey, wanna hang today? -> ifz-!xboob!iboh!upebz@

JS Fiddle demo

参考文献:

答案 2 :(得分:0)

为什么gen(',') === 'a'

var alph = 'abcdefghijklmnopqrstuvwxyz';
var e = alph.indexOf(',');
console.log(e);
// -1
console.log(alph[e + 1]);
// 'a'

你需要考虑这个案例;否则,alph中没有的任何字符都会映射到'a'

(我发现您在'a'的开头和结尾都重复了alph。这很有效,但使用模数运算符{{}更常见1}}或明确检查%。)

答案 3 :(得分:0)

您只需添加一个包含不受尊重的字符的数组:

var ex = ['?','!',' ','%','$','&','/']

整体

for (var i=0;i<str.length;i++) {
    var index = str[i].charAt(0)
    if (alph.indexOf(index) >-1) {
        var e = alph.indexOf(index);
        output.innerHTML += alph[e + 1];
    } else {
        var e = index;
        output.innerHTML += e;
    }
}

JSFIDDLE:http://jsfiddle.net/TRNCFRMCN/hs15f0kd/8/