关于javascript的交换案例

时间:2014-06-28 22:49:14

标签: javascript

我创建了一个更改案例的脚本,但在文本上使用它的结果完全相同,没有一个更改。有人可以解释一下吗?

var swapCase = function(letters){
    for(var i = 0; i<letters.length; i++){
        if(letters[i] === letters[i].toLowerCase()){
            letters[i] = letters[i].toUpperCase();
        }else {
            letters[i] = letters[i].toLowerCase();
        }
    }
   console.log(letters);
}

var text = 'So, today we have REALLY good day';

swapCase(text);

9 个答案:

答案 0 :(得分:12)

就像伊恩所说,你需要建立一个新的字符串。

var swapCase = function(letters){
    var newLetters = "";
    for(var i = 0; i<letters.length; i++){
        if(letters[i] === letters[i].toLowerCase()){
            newLetters += letters[i].toUpperCase();
        }else {
            newLetters += letters[i].toLowerCase();
        }
    }
    console.log(newLetters);
    return newLetters;
}

var text = 'So, today we have REALLY good day';

var swappedText = swapCase(text); // "sO, TODAY WE HAVE really GOOD DAY"

答案 1 :(得分:3)

您可以使用这个简单的解决方案。

&#13;
&#13;
var text = 'So, today we have REALLY good day';

var ans = text.split('').map(function(c){
  return c === c.toUpperCase()
  ? c.toLowerCase()
  : c.toUpperCase()
}).join('')

console.log(ans)
&#13;
&#13;
&#13;

使用ES6

&#13;
&#13;
var text = 'So, today we have REALLY good day';

var ans = text.split('')
.map((c) =>
 c === c.toUpperCase() 
 ? c.toLowerCase()
 : c.toUpperCase()
).join('')

console.log(ans)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这是使用按位XOR运算符^的替代方法。
我觉得这比使用toUppserCase / toLowerCase方法更优雅

"So, today we have REALLY good day"
.split("")
.map((x) => /[A-z]/.test(x) ? String.fromCharCode(x.charCodeAt(0)  ^ 32) : x)
.join("")

说明
因此,我们首先拆分数组,然后使用map函数对每个字符进行突变,然后将数组重新连接在一起。
在map函数内部,RegEx测试值是否为字母字符:/[A-z]/.test(x),如果是,则使用XOR运算符^来移位位。这就是颠倒性格的原因。 charCodeAt将char转换为UTF-16代码。 XOR(^)运算符翻转字符。 String.fromCharCode将代码转换回char。 如果RegEx给出false(不是ABC字符),则三元运算符将按原样返回字符。

参考:

答案 3 :(得分:1)

一个用于短模式代码大战的班轮:

KeyError: '[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41] not found in axis'

答案 4 :(得分:0)

这是一个使用正则表达式的解决方案。它全局匹配每个word-char,然后在匹配的组上执行一个函数。

function swapCase(letters) {
  return letters.replace( /\w/g, function(c) {
    if (c === c.toLowerCase()) {
      return c.toUpperCase();
    } else {
      return c.toLowerCase();
    }
  });
}

答案 5 :(得分:0)

家伙!获得一些简单的代码:

string.replace(/\w{1}/g, function(val){
    return val === val.toLowerCase() ? val.toUpperCase() : val.toLowerCase();
});

答案 6 :(得分:0)

#这是一个将大写转换为小写,反之亦然并返回字符串的程序。

function main(input) {
    var i=0;
    var string ='';
    var arr= [];
    while(i<input.length){
       string = input.charAt(i);

       if(string == string.toUpperCase()){
           string = string.toLowerCase();
           arr += string;
        }else {
           string = string.toUpperCase(); 
           arr += string;
       }
       i++;
    }
    console.log(arr);
}

答案 7 :(得分:0)

  1. 拆分字符串并使用 map 函数交换字母的大小写。
  2. 我们将从 #1 中获取数组。
  3. 使用join函数加入数组。

`

let str = 'The Quick Brown Fox Jump Over A Crazy Dog'
let swapedStrArray = str.split('').map(a => {
    return a === a.toUpperCase() ? a.toLowerCase() : a.toUpperCase()
})

//join the swapedStrArray
swapedStrArray.join('')
console.log('swapedStrArray', swapedStrArray.join(''))

`

答案 8 :(得分:-1)

作为旁注,除了已经说过的内容之外,您的原始代码只能进行一些小修改:将字符串转换为1字符子串的数组(使用拆分),处理此数组并将其转换回来当你完成时(使用连接)到一个字符串。

注意:这里的想法是强调访问字符串中的字符(无法修改)和处理子字符串数组(可以修改)之间的区别。性能方面,Fabricator的解决方案可能更好。

var swapCase = function(str){
    var letters = str.split("");

    for(var i = 0; i<letters.length; i++){
        if(letters[i] === letters[i].toLowerCase()){
            letters[i] = letters[i].toUpperCase();
        }else {
            letters[i] = letters[i].toLowerCase();
        }
    }
    str = letters.join("");
    console.log(str);
}

var text = 'So, today we have REALLY good day';

swapCase(text);