js實現陣列內元素隨機排序
阿新 • • 發佈:2020-08-05
其實蠻容易實現的,關鍵是簡潔與否,下面是我自己寫的。
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也會改變。
要解決這個問題也不難,可以對陣列進行拷貝,有深拷貝和淺拷貝什麼的,這個大家可以去網上搜一下。具體看用處了,如果實在不需要原陣列的話沒必要多此一舉了。