我现在正在为一个简单但困难的问题工作,我在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];
}
}
答案 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@
参考文献:
答案 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;
}
}