我需要在数组的每个元素中使用大写偶数字符和小写奇数字符,以便在输入“ This is a test”的情况下输出为“ ThIs Is A TeSt”(不包括空格,因此每个单词都以大写字母。
这是到目前为止我要提出的:
function toWeirdCase(string) {
var reg = /\b(?![\s.])/
var res = string.split(reg)
var newArr = []
for (let k = 0; k < res.length; k++) {
for (let j = 0; j < res[k].length; j++) {
if (j % 2 == 0) {
res[k].charAt(j).toUpperCase()
} else {
res[k].charAt(j).toLowerCase()
}
}
newArr.push(res[k])
}
return newArr.join('')
}
console.log(toWeirdCase('This is a test'))
它无法按预期运行,由于缺乏经验,我无法确定缺少的内容。你能帮我这个忙吗?谢谢。
答案 0 :(得分:1)
高尔夫版本:
input
.split(/\s+/)
.map(wrd => wrd
.split('')
.map((c, i) => i % 2 ? c.toLowerCase() : c.toUpperCase())
.join(''))
.join(' ');
如果您不在乎行长,那就是单线。
答案 1 :(得分:0)
toUpperCase
不会修改字符串(JavaScript字符串是不可变的)。您需要将结果分配回一个变量。
function toWeirdCase(string) {
var reg = /\b(?![\s.])/
var res = string.split(reg)
var newArr = []
for (let k = 0; k < res.length; k++) {
let newString = "";
for (let j = 0; j < res[k].length; j++) {
if (j % 2 == 0) {
newString += res[k].charAt(j).toUpperCase()
} else {
newString += res[k].charAt(j).toLowerCase()
}
}
newArr.push(newString)
}
return newArr.join('')
}
console.log(toWeirdCase('This is a test'))
答案 2 :(得分:0)
您可以将String.replace()
与外部变量一起使用,以决定文本是大写还是小写:
function toWeirdCase(string) {
let uppercase = true;
return string
.replace(/./g, c => {
const current = uppercase;
uppercase = c === ' ' ? true : !uppercase;
return current ? c.toUpperCase() : c.toLowerCase();
});
}
console.log(toWeirdCase('This is a test'))
答案 3 :(得分:0)
我们可以使用基本映射来实现此目的,然后使用模块选择大/小写奇/偶值
function toWeirdCase(str){
return str.split(' ').map(word =>
word.split('').map((itm, idx) => idx % 2 ? itm.toLowerCase() : itm.toUpperCase()).join('')
).join(' ')
}
console.log(toWeirdCase('This is a test'))
答案 4 :(得分:0)
您可以尝试
let str = "This is a test";
let op = str.split(' ').map((a,i)=>a.split('').map((e,i)=>i%2==0 ? e.toUpperCase() : e.toLowerCase()).join('')).join(' ');
console.log(op)
答案 5 :(得分:0)
您可以使用Array.map
和String.split
,String.join
获得该结果。
遍历单词,然后将每个字符都排成一行,即使是大写也要小写。
const up = string =>
string.split(' ')
.map(word => word.split('')
.map((chr, i) => chr[i%2 ? 'toLowerCase' : 'toUpperCase']()).join('')
).join(' ')
console.log(up('This is a test'))
您也可以只用一个Array.map
和Array.reduce
来解决它:
const chg = wrd => wrd.split('').map((c,i) => c[i%2 ? 'toLowerCase' : 'toUpperCase']()).join('')
const up = str => str.split(' ').reduce((r,c) => r.concat(' ', chg(c)), '')
console.log(up('This is a test'))
答案 6 :(得分:0)
您可以使用简单的地图功能来做到这一点:
"This is a test"
.split("")
.map((s, i) => (i % 2 == 0 ? s.toUpperCase() : s))
.join("");