Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组元素在循环的内部没有变化_Javascript_Arrays_String_For Loop - Fatal编程技术网

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.log
alphArr[alphArr.indexOf(i)+n]
赋值给
i
不会更改数组。在这种情况下,您只是重新赋值了一个不相关的变量。它是当前数组项的值。但是,更改它不会更改数组,因为@VLAZ现在我得到了它。这是由于传递值,因为它只表示元素的值。非常感谢您的澄清ation!你想做什么?预期的结果是什么?试试console.log
alphArr[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]会起作用。