【发布时间】:2020-10-13 17:48:24
【问题描述】:
function rot13(str) {
let alphArr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
let n = 13;
let arr = str.split("");
let len = alphArr.length;
for (let i of arr) {
if (alphArr.includes(i)) {
if (alphArr.indexOf(i) + n <= len - 1) {
i = (alphArr[alphArr.indexOf(i) + n])
console.log(i) // This is as expected
}
}
}
console.log(arr) // Array itself did not mutate and is showing the initial array.
return str;
}
rot13("SERR PBQR PNZC");
第二个if 语句中i 的值是正确的,如console.log 语句中所示,但数组本身没有发生变异。为什么会这样?
附:我已经通过使用map 函数解决了它,它可以正常工作,因为map 函数不会改变原始数组。
【问题讨论】:
-
你想做什么,预期的结果是什么?
-
试试 console.log
alphArr[alphArr.indexOf(i)+n] -
分配给
i不会更改数组。在这种情况下,您只是重新分配了一个不相关的变量。 -
是当前数组项的值。但是,更改它不会更改数组,因为JavaScript is not pass-by-reference
-
@VLAZ 现在我明白了。它由于按值传递,因为它只是表示元素的值。非常感谢您的澄清!
标签: javascript arrays string for-loop