其實蠻容易實現的,關鍵是簡潔與否,下面是我自己寫的。
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也會改變。
要解決這個問題也不難,可以對數組進行拷貝,有深拷貝和淺拷貝什么的,這個大家可以去網上搜一下。具體看用處了,如果實在不需要原數組的話沒必要多此一舉了。