js實現數組內元素隨機排序


其實蠻容易實現的,關鍵是簡潔與否,下面是我自己寫的。

復制代碼
function randomSort(a){
    var arr = a,
        random = [],
        len = arr.length;
    for (var i = 0; i < len; i++) {
      var index = Math.floor(Math.random()*(len - i));
      random.push(a[index]);
      arr.splice(index,1);
    }
    return random;
  }

  var a = [1,2,3,4,5,6,7,8,9,10];
  console.log(randomSort(a));
復制代碼

網上搜了下,有更簡潔的,是用數組的sort方法,代碼如下:

function randomsort(a, b) {
   return Math.random()>.5 ? -1 : 1;
}
var arr = [1, 2, 3, 4, 5];
arr.sort(randomsort);

通過隨機產生0到1的數,然后判斷是否大於0.5從而影響排序,產生隨機性的效果。

上面我們測試的時候都是用純數字的數組元素測試的,當然數組元素可以是字符串,也可以是對象,都是可以排序的。

不過有個問題,不管是我的方法還是那個牛人的方法,隨機排序之后,原數組都變掉了,這個是要注意的。雖然我的方法里面有這么一句:var arr = a,但實際上這里的arr只是對數組a的引用,arr改變了,a也會改變。

要解決這個問題也不難,可以對數組進行拷貝,有深拷貝和淺拷貝什么的,這個大家可以去網上搜一下。具體看用處了,如果實在不需要原數組的話沒必要多此一舉了。

參考資料:http://fp-moon.iteye.com/blog/1004419


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM