1. 程式人生 > 實用技巧 >js實現陣列內元素隨機排序

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