// Create a function that takes a string and turns it into a Mexican Wave.
var smallarr=[]
var bigarr=[]
var another=""
function wave(str){
for (var i=0;i<str.length;i++){
smallarr.push(str)
}
for (var j=0;j<smallarr.length;j++)
{
if(smallarr[j][j].toUpperCase()==smallarr[j][j])
{
var c=smallarr[j][j].toLowerCase()
smallarr[j][j]=c
}
else {
var c=smallarr[j][j].toUpperCase()
smallarr[j][j]=c}
}
}
return smallarr
}
document.write(wave("edabit"))
//console.log(smallarr)
我期望的输出是wave(“ edabit”)➞[“ Edabit”,“ eDabit”,“ edAbit”,“ edaBit”,“ edabIt”,“ edabiT”],但现在输出与输入相同。
任何建议表示赞赏。
最佳答案
代码的主要问题是您尝试更新字符串中的字符,但这是不可能的。在JavaScript中,字符串是不可变的。尝试分配给某个索引将对该字符串无效。
相反,您必须重建一个字符不同的字符串。您可以使用slice
取一部分字符串来帮助您构建它。
这是适合这种效果的代码:
function wave(str) {
var smallarr = []; // define as local
for (var j = 0; j < str.length; j++) {
let c = str[j]; // Use a variable to avoid duplicate code
if (c.toUpperCase() === c) {
c = c.toLowerCase();
} else {
c = c.toUpperCase();
}
// You cannot modify a string; you need to regenerate one
smallarr.push(str.slice(0, j) + c + str.slice(j+1));
}
return smallarr
}
console.log(wave("edabit"))