// 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"))

09-25 18:48
查看更多