js中temp=deck[i], deck[i]=deck[r], deck[r]=temp怎么理解?

如题,这个完全不理解,按照 这个从左到右,temp=temp,那么就无意义了啊,,,但是上面的代码是指代//交换

附上洗牌的代码:

Deck.prototype.shuffle=function(){

var deck= this.cards, len= deck.length;

for(var i= len-1; i> 0; i--) {

var r= Math.floor(Math.random()*(i+1)), temp;

temp=deck[I], deck[i]=deck[r], deck[r]=temp;}

return
this;

}
最新回答
﹋ˋ︸黑曼斑

2023-12-31 14:06:52

使用交换律

r为0~i的随机索引


索引为i的数据和索引为r的数据进行交换,循环len个长度进行交换,也就是说交换len次


类似冒泡排序法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var a = [3,2,13], len = a.length;
for(var i = 0; i < len; i++){
    for(var j = i + 1; j < len; j++){
        if(a[i] > a[j]){
            // 把a[i]先存储到tmp中
            var tmp = a[i];
            //然后把a[j]存储到a[i]
            a[i] = a[j];
            //原来的a[i]就是tmp,存储到a[j],这样就换过来了
            a[j] = tmp;
        }
    }
}
看来你还不会冒泡排序法
 
只不过少了个for循环,j换成了随机的r,从而实现了洗牌功能。