我正在尝试编写一个接受字符串的函数,该字符串将以数组内的“waved”版本返回:
wave("stack") => ["Stack","sTack", "stAck", "staCk", "stack"]
我写了这段代码,但是当我在字符串中有一个双字母时出现了问题:
function wave(word){
let arr = []
word.split("").map(c=> arr.push(word.replace(c, c.toUpperCase())))
return arr
}
console.log(wave("hello"))
wave("hello")
给我 ["Hello", "hEllo", "heLlo", "heLlo", "hellO"]
注意索引 2 和索引 3 是相同的,索引 3 应该是“helLo”,而不是“heLlo”。 这是为什么?我该如何解决这个问题?
最佳答案
问题是由于 replace
的调用方式造成的。它总是替换 l
的第一个实例。下面的代码应该可以工作。
function wave(word){
let arr = []
word.split("").map((c, i) => {
let parta = word.substring(0, i);
let partb = word.substring(i + 1);
arr.push(parta + c.toUpperCase() + partb);
});
return arr
}
console.log(wave("stack"));
console.log(wave("hello"));
关于javascript - toUpperCase() 映射时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858519/