javascript配列はランダムシャッフルを繰り返さない

1645 ワード

Array.prototype.random=function(){

    for(var i=0;i<this.length;i++){

        var iNum=parseInt(Math.random()*this.length);

        var oNow=this[i];    //                 

        this[i]=this[iNum];

        this[iNum]=oNow;

    }

    return this;

};



var arr1=[1,2,3,4,5,6,7,8,9,10];

var arr2=['  ','  ','  ','  ','  '];

document.write(arr1.random()+'<br/>');

document.write(arr2.random());
 
原生はこの方法を提供していませんので、直接原型に加えましょう.これでnewが出てくるものは全部使えます.
実は原理はとても簡単です.配列全体を循環する時に、現在の項目とランダム項目の位置を交替するだけです.唯一の言及すべきは、置換操作が行われていない前に一つの変数で現在の項目を保存します.
var iNow=this[i]
これはとても重要です....