String.fromCharCode не дает результата javaScript

после запуска кода я не получаю результата в окне. и я не могу найти результат проблемы, который должен быть строкой, созданной из charCode.

function rot13(str) {
  var te = [];
  var i = 0;
  var a = 0;
  var newte = [];

  while (i < str.length) {
    te[i] = str.charCodeAt(i);
    i++;
  }
  while (a != te.length) {
    if (te[a] < 65) {
      newte[a] = te[a] + 13;
    } else
      newte[a] = te[a];
    a++;
  }

  var mystring = String.fromCharCode(newte);


  return mystring;
}

// Change the inputs below to test
rot13("SERR PBQR PNZC");


person EdenLT    schedule 20.10.2016    source источник
comment
Вы ничего не делаете с возвращаемым значением — чего вы ожидаете?   -  person Andrew Li    schedule 20.10.2016
comment
String.fromCharCode(newte);, вероятно, тоже не делает того, что вы ожидаете   -  person Jaromanda X    schedule 20.10.2016
comment
не могли бы вы объяснить мне, что я скучаю? я пробовал несколько разных сценариев, и я всегда получаю ошибку или ничего   -  person EdenLT    schedule 20.10.2016
comment
Возможный дубликат Могу ли я передать массив в fromCharCode   -  person Alexander O'Mara    schedule 20.10.2016


Ответы (2)


Метод String.fromCharCode предполагает, что вы будете передавать каждое число как отдельный аргумент. В вашем примере кода вы передаете массив в качестве одного аргумента, что не сработает.

Вместо этого попробуйте использовать метод apply(), который позволит вам передать массив и преобразовать его в несколько отдельных аргументов:

var mystring = String.fromCharCode.apply(null, newte);
person Steven Schobert    schedule 20.10.2016
comment
.call не принимает массив таким образом, это .apply. - person Alexander O'Mara; 20.10.2016
comment
Упс, да нет, ты совершенно прав. Обновление ответа. - person Steven Schobert; 20.10.2016

Похоже, String.fromCharCode() не определен для работать с массивом.

Попробуйте так:

function rot13(str) {
  var result = "";
  
  for (var i = 0; i < str.length; i++) {
    var charCode = str.charCodeAt(i) + 1;
    
    if (charCode < 65) {
      charCode += 13;
    }
    
    result += String.fromCharCode(charCode);
  }
  
  return result;
}

// Change the inputs below to test
console.log(rot13("SERR PBQR PNZC"));

ПРИМЕЧАНИЕ. Я скопировал вашу логику замены символов, но она не кажется правильной .

person Robby Cornelissen    schedule 20.10.2016
comment
да, я обнаружил, что не получаю ожидаемого результата :) буду работать с ним дальше. - person EdenLT; 20.10.2016