我正在学习“费舍尔·耶茨洗牌”,遇到了一个问题。我的代码中突出显示并注解了“this work”、“this not work”的部分是对数组进行洗牌。根据我对javascript的理解,不起作用的部分应该起作用。你能给我解释一下为什么它不起作用吗?
const array = [..."12345678"]
let arrayShuffle = function(arr){
for(let i = array.length - 1; i > 0; i--){
let randomNum = Math.floor(Math.random() * (i + 1))
let temp;
let currentPos = arr[i]
let randomPos = arr[randomNum]
/* This Work(it shuffled) \/ */
temp = arr[i]
arr[i] = arr[randomNum]
arr[randomNum] = temp
/* This Doesnt Work(Doesn't shuffle) \/ */
// temp = currentPos
// currentPos = randomPos
// randomPos = temp
}
return arr
}
let res = arrayShuffle(array)
console.log(res)
1条答案
按热度按时间9nvpjoqh1#
这不起作用,因为
currentPos = arr[i]
及randomPos = arr[randomNum]
. 这两个都是在复制arr中的值,而不是acctual指针。因此,当你改变currentPos
或randomPos
您只是在更改数组中实际内容的副本。比如说,,
x = 5
y = 6
这里也发生了同样的事情。当我们让y=x时,它只是复制x中的值,而不是返回x的实际引用。因此,当我们改变y时,我们只改变y,而不影响x。