我正在尝试将邮件中的所有字母翻译成序列中的p字母。例如:翻译(" bbcd",2)将返回" ddef"。我被困在数组部分,其中字母[j + p]返回undefined。如果我做字母[j-p],它会起作用。
这是我的代码:
function Translate(Message, p) {
var alphabets = ['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'];
var message_array = Message.split('');
for(var i in message_array){
for(var j in alphabets){
if(message_array[i]==alphabets[j]){
message_array[i]=alphabets[j+p];//returns undefined
}
}
}
return message_array;
}
console.log(Translate("bbcd", 2));
答案 0 :(得分:2)
问题是j+p
正在进行字符串连接,typeof j
会在您使用string
for...in
function Translate(message, p) {
var alphabets = ['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'];
return message.split('').map(function(c) {
var idx = alphabets.indexOf(c);
return idx == -1 ? c : alphabets[(idx + p) % alphabets.length]
});
}
var value = Translate("azpq", 2);
result.innerHTML = JSON.stringify(value);
<div id="result"></div>
答案 1 :(得分:1)
alphabets[j+p];
为j == 26
返回未定义的内容循环迭代。
使用数组的indexOf
方法并将循环结构更改为
for(var i in message_array)
{
var index = alphabets.indexOf( message_array[ i ] );
message_array[ i ] = alphabets[ index + 2 ];
}
这也将达到&#39; undefined&#39;如果您的Message
中包含y
或z
。
所以,您可能希望将其循环回到开头
for(var i in message_array)
{
var index = alphabets.indexOf( message_array[ i ] );
message_array[ i ] = alphabets[ (index + 2) % alphabets.length ];
}
答案 2 :(得分:1)
SetDllDirectory
答案 3 :(得分:0)
找到值后,您需要中断。否则内循环将在未来的循环中再次找到匹配。
function Translate(Message, p) {
var alphabets = ['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'];
var message_array = Message.split('');
for (var i in message_array) {
for (var j in alphabets) {
if (message_array[i] == alphabets[j]) {
console.log(alphabets[parseInt(j) + parseInt(p)])
message_array[i] = alphabets[parseInt(j) + parseInt(p)]; //returns undefined
break;
}
}
}
return message_array;
}
alert(Translate("bbcd", 2));
答案 4 :(得分:0)
你需要确保j + p永远不会大于字母的长度。这将导致“越界”错误。例如p = 30.
修复只是检查与p相比的长度并返回已定义的内容。
message_array[i] = (j+p > alphabets.length) ? alphabets[j+p] : alphabets[j]; // returns element at j if out of bounds
答案 5 :(得分:0)
此建议适用于字母字符串而非数组。
您可以为单个字符访问类似数组的字符串。对于我建议使用// given
List<ClassA> {{1,"a"},{2,"b"},{3,"c"},{4,"d"}} etc
Lisst<ClassB> {{1,"aaa","ccc","aasdaf"},{3,"aaa","ccc","aasdaf"}}
// expected result
List<ClassA> {{1,"a"},{3,"c"}}
的查找,可以在字符串对象String#indexOf()
以及数组对象Array#indexOf()
中使用该方法。两种方法都返回找到的项目/字符串/字符的位置,如果找不到则返回indexOf()
。
结果我拿了一个空字符串并用新字符连接起来。
对于正确的索引范围,在添加一些值时,选择的方法是使用modulo operator。它返回第二个数字的除法提醒。这是-1
字符串的长度。
alphabet