我创建了一个更改案例的脚本,但在文本上使用它的结果完全相同,没有一个更改。有人可以解释一下吗?
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);
答案 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)
您可以使用这个简单的解决方案。
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;
使用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)
&#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)
`
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);