yates)shuffle无法理解我的部分代码

w41d8nur  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(366)

我正在学习“费舍尔·耶茨洗牌”,遇到了一个问题。我的代码中突出显示并注解了“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)
9nvpjoqh

9nvpjoqh1#

这不起作用,因为 currentPos = arr[i]randomPos = arr[randomNum] . 这两个都是在复制arr中的值,而不是acctual指针。因此,当你改变 currentPosrandomPos 您只是在更改数组中实际内容的副本。
比如说,,

let x == 5
let y == x
y = y+1
console.log(x)
console.log(y)

x = 5 y = 6 这里也发生了同样的事情。当我们让y=x时,它只是复制x中的值,而不是返回x的实际引用。因此,当我们改变y时,我们只改变y,而不影响x。

相关问题