Javascript 数组元素在循环的内部没有变化
Javascript 数组元素在循环的内部没有变化,javascript,arrays,string,for-loop,Javascript,Arrays,String,For Loop,函数rot13(str){ 让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”); 设n=13; 设arr=str.split(“”); 设len=alphArr.长度; 对于(让我考虑arr){ if(字母RR包括(i)){ 如果(alphArr.indexOf(i)+n不能直接将值设置为for of循环中的元素,请尝试以下操作 函数rot13(str){ 让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”); 设n=13; 设
函数rot13(str){
让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”);
设n=13;
设arr=str.split(“”);
设len=alphArr.长度;
对于(让我考虑arr){
if(字母RR包括(i)){
如果(alphArr.indexOf(i)+n不能直接将值设置为for of循环中的元素,请尝试以下操作
函数rot13(str){
让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”);
设n=13;
设arr=str.split(“”);
设len=alphArr.长度;
设j=0
对于(让我考虑arr){
if(字母RR包括(i)){
如果(alphArr.indexOf(i)+n不能直接将值设置为for of循环中的元素,请尝试以下操作
函数rot13(str){
让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”);
设n=13;
设arr=str.split(“”);
设len=alphArr.长度;
设j=0
对于(让我考虑arr){
if(字母RR包括(i)){
如果(alphArr.indexOf(i)+n而不是对of
循环使用,则应使用map
创建新数组并使用新映射的数组。修复了填充工作示例:
函数rot13(str){
让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”);
设n=13;
设arr=str.split(“”);
设len=alphArr.长度;
arr=arr.map((i)=>{
if(字母RR包括(i)){
设指数=(αRR.indexOf(i)+n)%len;
返回alphArr[索引];
}
返回i;
});
返回arr.join(“”);
}
console.log(rot13(“SERR-PBQR-PNZC”);//记录“免费代码营”
而不是使用for of
循环,您应该使用map
创建新数组并使用新映射的数组。修复了完整的工作示例:
函数rot13(str){
让alphArr=“abcdefghijklmnopqrstuvxyz”拆分(“”);
设n=13;
设arr=str.split(“”);
设len=alphArr.长度;
arr=arr.map((i)=>{
if(字母RR包括(i)){
设指数=(αRR.indexOf(i)+n)%len;
返回alphArr[索引];
}
返回i;
});
返回arr.join(“”);
}
console.log(rot13(“SERR-PBQR-PNZC”);//日志“免费代码营”
值得一提的是,您的代码可以简化:
let rot=(str,n,asciiStart='A'.charCodeAt(0),asciiEnd='Z'.charCodeAt(0),asciiRange=asciiEnd-asciiStart+1)=>
str.split(“”)
.map(c=>{
设code=c.charCodeAt(0)-asciiStart;
如果(代码>=0&&code p.innerHTML=rot(inp.value,13));
值得一提的是,您的代码可以简化:
let rot=(str,n,asciiStart='A'.charCodeAt(0),asciiEnd='Z'.charCodeAt(0),asciiRange=asciiEnd-asciiStart+1)=>
str.split(“”)
.map(c=>{
设code=c.charCodeAt(0)-asciiStart;
如果(代码>=0&&code p.innerHTML=rot(inp.value,13));
您想做什么以及预期的结果是什么?请尝试console.logalphArr[alphArr.indexOf(i)+n]
赋值给i
不会更改数组。在这种情况下,您只是重新赋值了一个不相关的变量。它是当前数组项的值。但是,更改它不会更改数组,因为@VLAZ现在我得到了它。这是由于传递值,因为它只表示元素的值。非常感谢您的澄清ation!你想做什么?预期的结果是什么?试试console.logalphArr[alphArr.indexOf(i)+n]
赋值给i
不会更改数组。在这种情况下,您只是重新赋值了一个不相关的变量。它是当前数组项的值。但是,更改它不会更改数组,因为@VLAZ现在我得到了它。这是由于传递值,因为它只表示元素的值。非常感谢您的澄清ation!如果你要使用循环计数器,你最好使用一个常规的循环for(让i=0;i
,并在其中使用arr[i]
。将for..of
和计数器混合使用会很混乱。更好的解决方案是只需迭代数组中的条目,其中包括索引:for(让arr.entries()的[索引,元素])
是的,我会为我的代码这样做,但在这里,我使用了发问者提供的代码。很抱歉,混乱的解决方案我不知道你做不到,我也没有找到任何文档说明你做不到。如果你发现了什么,请分享。for of循环中的元素只包含特定属性的值你可以在MDN文档上看到它。如果你要使用循环计数器,你可以使用常规循环for(让i=0;i
并使用arr[i]
在其中。将for..of
和计数器混合在一起非常混乱。更好的解决方案是迭代数组中的条目,其中包括索引:for(让[index,element]of arr.entries())
是的,我会为我的代码这样做,但在这里,我使用了发问者提供的代码。很抱歉,混乱的解决方案我不知道你做不到,我也没有找到任何文档说明你做不到。如果你发现了什么,请分享。for of循环中的元素只包含特定属性的值你可以在MDN文档上看到它。我确实用map解决了它,因为它没有像Matt指出的那样改变原始数组,但我只是不明白为什么原始数组在这种情况下没有改变。我得到了答案,多亏了VLAZ。这是因为传递值的问题,这就是为什么alphArr[alphArr.indexOf(I)+n]会有用的。我确实用map解决了它,因为它没有像Matt指出的那样变异原始数组,但我只是不明白为什么原始数组在这种情况下没有变异。多亏了VLAZ,我得到了答案。这是因为传递值的问题,这就是为什么alphArr[alphArr.indexOf(I)+n]会起作用。