我有一个函数,其中我要遍历给定的字符串,交替使用每个字符的大写字母并将其连接到变量alt
。
为了正确地遍历此过程,我从原始字符串中删除了空格。但是我需要将它们添加回函数的末尾。
function alternatingCaps(str) { // 'hello world'
let words = str.toLowerCase().split(' '); // ['hello','world']
str = words.join(''); // 'helloworld'
let alt = '';
for(let i = 0; i < str.length; i++) {
if(i % 2 === 0)
alt += str[i].toUpperCase();
else
alt += str[i].toLowerCase();
}
return alt;
}
console.log(alternatingCaps('hello world'));
/* Output: "HeLlOwOrLd"
Wanted output: "HeLlO wOrLd" */
一旦alt
包含一个作为值包含在words
数组中的字符串,我想在单词的末尾添加一个空格。
这是我的尝试:
words.forEach(function(word) {
if(alt.toLowerCase().includes(word) && word[word.length - 1] === alt[i].toLowerCase())
alt += ' ';
});
它检查words
字符串中是否存在alt
数组中的任何单词,以及字符串的当前字符迭代是否对应于单词中的最后一个字母。如果是这样,它将在字符串中添加一个空格。
但这无法正常工作。
> Output: "HeLlO wOr Ld"
> Wanted output: "HeLlO wOrLd"
我还认为这会导致字母重复的问题。我如何实现我的目标?
答案 0 :(得分:1)
您不应该说自己的话。将它们保留为单词数组中的单独元素,然后可以遍历该数组,将函数应用于每个元素。
function alternatingCaps(str) { // 'hello world'
let words = str.toLowerCase().split(' '); // ['hello','world']
const alts = words.map(word => capitalizeEvens(word));
return alts.join(' ');
function capitalizeEvens(word) {
let alt = '';
for(let i = 0; i < word.length; i++) {
if(i % 2 === 0)
alt += word[i].toUpperCase();
else
alt += word[i].toLowerCase();
}
return alt;
}
console.log(alternatingCaps('hello world'));
答案 1 :(得分:0)
您可以一次遍历字符串一个字符。然后,检查字符是否为实际的文字字符。如果是这样,请替换大写字母;如果不是,则将其原样添加到输出中:
function altCaps(input) {
var result = '';
var cap = false;
for (var i = 0; i < input.length; i++) {
var c = input[i];
result += /\w/.test(c) ? (cap = !cap) ? c.toUpperCase() : c.toLowerCase() : c;
}
return result;
}
更新:清晰的代码
function altCaps(input) {
var result = '';
var cap = false;
for (var i = 0; i < input.length; i++) {
var c = input[i];
if (/\w/.test(c)) { // check if char is a "word character" (i.e. letter)
cap = !cap; // toggle next capitalization
if (cap) // if it should capitalize
result += c.toUpperCase(); // add uppercase letter
else
result += : c.toLowerCase(); // add lowercase letter
} else {
result += c; // no letter, so add character as is.
}
}
return result;
}