在 javascript 上交换大小写

IT技术 javascript
2021-01-29 18:06:16

我制作了一个更改大小写的脚本,但在文本上使用它的结果是完全相同的文本,没有任何更改。有人可以解释一下吗?

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);
6个回答

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

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"
谢谢你们的信息,我不知道它:)
2021-03-25 18:06:16
有点希望有没有条件的方法来做到这一点。太糟糕了 JS 没有音译功能。
2021-03-25 18:06:16

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

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)

使用 ES6

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)

使用[...text]代替split()
2021-04-11 18:06:16

伙计们!得到一个更简单的代码:

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

这是使用按位异或运算符的替代方法^
我觉得这比使用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将字符转换为 UTF-16 代码。XOR ( ^) 运算符翻转字符。String.fromCharCode将代码转换回字符。如果 RegEx 给出 false(不是 ABC 字符),则三元运算符将按原样返回字符。

参考:

短模式代码战争的一个班轮:

let str = "hELLO wORLD"
str.split("").map(l=>l==l.toLowerCase()?l.toUpperCase():l.toLowerCase()).join("")