Javascript 按顺序将字符串中的字母大写,并创建要存储的数组 //创建一个函数,将字符串转换为墨西哥波。 var smallarr=[] var bigarr=[] var-other=“” 功能波(str){ 对于(var i=0;i

Javascript 按顺序将字符串中的字母大写,并创建要存储的数组 //创建一个函数,将字符串转换为墨西哥波。 var smallarr=[] var bigarr=[] var-other=“” 功能波(str){ 对于(var i=0;i,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,您可以尝试使用double,其中第二个回调参数表示索引: let input=“edabit”; 让结果=input.split(“”).map( (u,i)=>input.split(“”).map( (char,j)=>i==j?char.toUpperCase():char.join() ); console.log(result);您可以将输入字符串拆分为一个字符数组,然后映射到该字符串上,将当前字符替换为大写版本: const wave=(str)=>{ 返回str .拆分(“”)

您可以尝试使用double,其中第二个回调参数表示索引:

let input=“edabit”;
让结果=input.split(“”).map(
(u,i)=>input.split(“”).map(
(char,j)=>i==j?char.toUpperCase():char.join()
);

console.log(result);
您可以将输入字符串拆分为一个字符数组,然后映射到该字符串上,将当前字符替换为大写版本:

const wave=(str)=>{
返回str
.拆分(“”)
.map((字符,索引)=>
str.substr(0,索引)+char.toUpperCase()+str.substr(索引+1))
}

log(wave('edabit');
您可以拆分字符串,映射数组,并通过检查索引和使用大写字母匹配索引,将拆分字符串用于另一个映射

const
波浪=(字符串)=>字符串
.拆分(“”)
.map(((u,i,splitted)=>splitted.map((c,j)=>i==j?c.toUpperCase():c).join(“”));
};
console.log(wave('edabit');
您可以使用该字符串创建数组。在回调(
mapFn
)中,获取当前字母和当前索引,并将其与一起使用以使用大写字母构建新字符串

constfn=str=>Array.from(str,(c,i)=>
str.substring(0,i)+c.toUpperCase()+str.substring(i+1)
);
常量结果=fn('edabit');
console.log(结果);
String.prototype.replaceAt=函数(索引,字符){
var a=本次拆分(“”);
a[索引]=字符;
返回a.join(“”);
}
const createDibet=(word)=>{
console.log('word'+word.split('');
let array=word.split(“”)
array.map((字母,i)=>{
设a=word.replaceAt(i,letter.toUpperCase());
控制台日志(a);
返回a;
});
console.log(数组)
//console.log(字)
}

createEdibet('edabit');
代码的主要问题是您试图更新字符串中的字符,但这是不可能的。在JavaScript中,字符串是不可变的。尝试分配给某个索引对字符串没有影响

相反,您必须重新生成一个与该字符不同的字符串。您可以使用
slice
获取部分字符串来帮助您构建它

以下是适用于该效果的代码:

功能波(str){
var smallarr=[];//定义为本地
对于(var j=0;jconsole.log(wave(“edabit”)
如果数组长度很小,可以使用
拆分
映射
连接
,如下所示:

let text=`edabit`;
让结果=text.split(“”).map((字符、索引、原始)=>{
设temp=[…原始];
temp[index]=temp[index].toUpperCase();
返回温度连接(“”);
});

console.log(results);
if(smallarr[j][j].toUpperCase()==smallarr[j][j]
背后的想法是什么?
?你真的应该努力正确地缩进代码。@Groo我只想检查smallarr[j][j]是否大写。:)@trincot我不知道……我已经尝试过对glitch进行自动格式化,可能它工作得不太好。你应该按原样粘贴代码,选择它,然后单击编辑器上的
按钮。然后它将按原样。我希望你已经尽了最大努力使它正确缩进。请更正它。嗨,谢谢你,t他的看起来不错。但是你有可能根据我的代码找到解决方案吗?到目前为止,我只学会了非常基本的方法…不是否决投票,但我避免了将任何函数Javascript数组函数加倍如果我可以避免的话,这相当于在同一数据上循环两次,我一直成功地使用red转换了这样的多个循环uce.@JiangYuxin请去寻找一些在线文档和教程,然后,你应该可以通过googlin找到它们,StackOverflow不存在以帮助你学习编码或特定语言的基础知识,sorry@JiangYuxin添加了基于循环的版本但是为什么在开始时返回,它不停止函数的执行吗?
return
首先,我们返回函数体中第一个表达式的结果。第一个表达式包括生成结果所需的所有操作,如
split
map
方法。我这里有一个问题:c=c.toLowerCase()因此,我可以更新一个字符。但不是字符串中的一个字符?但不是一个字符也被视为字符串吗?只是一个更新,以确保您看到我对上一条注释的编辑~这不是真正的字符串变异。变异(如果可能的话)将表示为
c[0]=c.toLowerCase()
。但是当您执行
c=c.toLowerCase()
时,您实际上创建了一个新字符串,并且恰好使用了相同的变量来存储该字符串(从而丢失了存储在该字符串中的以前的字符串)。这不是变异,而是重新分配。因此可以重新分配变量,但不能对字符串进行变异。
// 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)