我正在尝试解决此Codewars问题。
任务
在此简单的Kata中,您的任务是创建一个将字符串变成墨西哥波的函数。您将被传递一个字符串,并且必须在一个数组中返回该字符串,其中大写字母是一个站起来的人。
规则
- 输入字符串将始终为小写字母,但可能为空。
- 如果字符串中的字符为空格,则将其作为空座位通过。例wave(“ hello”)=> [“ Hello”,“ hEllo”,“ heLlo”,“ helLo”,“ hellO”]
My code so far is hosted on this repl.it
我的思考过程如下:
我很困,我的心在如何使用上苦恼
for(var j = 0; j < indexSpaceNumber.length; j++){
//join and add in the spaces at their former index before returning string
strToArray[indexSpaceNumber[j]].slice(0, " ");
}
将空格插入字符串。
如果有任何指导或提示,将不胜感激。我觉得我已经很近了,但是很沮丧地很远。
主要想法是:
您可以使用Array.from()
将字符串转换为数组,并将每个项目映射到新字符串。如果字符是空格,则返回错误(示例中为空字符串)。创建数组后,过滤所有虚假值:
Array.from()
遍历字符串中的每个字符并构建const wave = str =>
Array.from(str, (c,i) => // convert the string to an array
// replace the character with an uppercase version in the original string
c === ' ' ?
''
:
`${str.substring(0, i)}${c.toUpperCase()}${str.substring(i + 1)}`
).filter(c => c)
const result = wave("hello")
console.log(result)
Slice str from start till current char + current char to upper case + Slice str from current char to end
对于带空格的字符串
const wave = str => {
const res = [];
for (let i = 0; i < str.length; i++) {
res.push(`${str.slice(0, i)}${str[i].toUpperCase()}${str.slice(i + 1)}}`);
}
return res;
};
console.log(wave("hi my name is rylan"));
我将递归;)
您知道对于长度为[[n的字符串,您需要一个长度相同的数组。那是你的退出条件。
您可以在每次迭代时使用数组的长度来计算下一个字符串的形状:function wave(str) {
let res = []
str.toLowerCase().split('').forEach((v, i) => {
if(v == ' ') return;
res.push( str.substr(0, i) + v.toUpperCase() + str.substr(i + 1) )
});
return res
}
console.log(wave("hello hello"))
hello [] [Hello] 0: uppercase 1st char and append hello [Hello] [Hello hEllo] 1: uppercase 2nd char and append hello [Hello hEllo] [Hello hEllo heLlo] 2: uppercase 3rd char and append ...