在函数内部改了参数,再用return返回参数,却显示原始输入的参数,该怎么办?

新手上路,请多包涵

clipboard.png
刚接触javascript几个礼拜,碰到一个关于凯撒密码的问题,就动手写了一下,自己还没写完。发现函数内部虽然对参数做了变动,但想返回已经变动过的参数(达到字母移位的效果),却返回了原封不动的原参数,该怎么办?

阅读 1.8k
3 个回答
str = str.replace...

其实, 没必要在charCodeAt/fromCharCode之间转来转去的, 完全可以处理完统一转

function rot13(str){
    // 将 字符串 转为 Unicode值数组
    var empty = Array.prototype.map.call(str,function(s){return s.charCodeAt(0)})
    // 构建一个新数组
    .map(function(num){
        // left
        if(num >=65 && num <= 77){
            return num + 13;
        // right
        } else if(num >= 78 && num <= 90){
            return num;
        // 其它
        } else {
            return num;
        }
    });
    // 将 Unicode值数组 转回字符串
    return String.fromCharCode.apply(null, empty);
}

str进行replace之后,要把得到的内容重新赋回给str

  1. 代码第九行不要使用inin用于判断一个对象有没有一个属性,不能判断一个数组是否包含某个元素,使用includes代替;
  2. 代码第10行使用str = str.replace重新给str赋值;
function rot13 (str) {
  var empty = [];
  for (var i = 0; i < str.length; i++) {
    empty.push(str.charCodeAt(i))
  }
  var left = empty.filter(function (x) {return x >= 65 && x <= 77})
  var right = empty.filter(function (y) {return y >= 78 && y <= 90})
  for (var j = 0; j < str.length; j++) {
    if (left.includes(str.charCodeAt(j))) { // 使用includes
      str = str.replace(str[j], String.fromCharCode(str.charCodeAt(j) + 13)) // 重新赋值
    }
  }
  return str
}
推荐问题