有一個陣列a=[4,19,23,44,56,1],新建一個陣列b,b從a中一次隨機選取一個元素,取完為止。用JavaScript實作
认证高级PHP讲师
可以用偽隨機對a洗牌,取任意兩個位置的數字進行交換,如此進行n次達到洗牌效果,然後賦值給b。
或直接按照步驟來,如果不考慮程式碼效率的話,lodash函式庫提供的陣列操作可以讓程式碼更優雅:
var src = [4,19,23,44,56,1]; var shuffle = []; while(src.length > 0){ var random_index = Math.floor(Math.random() * src.length); shuffle.push(src[random_index]); src = src.filter(function(el, i){ return i != random_index; }); }
想到更好的偽隨機方法,直接隨機排序,程式碼更簡潔,運作效率高:
var src = [4,19,23,44,56,1]; var shuffle = src; shuffle.sort(function(){ return Math.floor(Math.random() * 3) - 1; });
雷雷
實作如下:
var a = [4,19,23,44,56,1]; function randomSort(array){ var newArray = []; for(let i = 0; i < array.length;){ let j = Math.random() * array.length; // 获取随机的下标值 j = ~~j; // 取整 let item = array.splice(j, 1)[0]; // 从原数组中剔除选中的元素 newArray.push(item); } return newArray; } randomSort(a);
我的想法是遍歷這個數組,取得這個數組中的隨機元素,從a數組中刪除同時push進b數組,然後類推下去
var a = [4,19,23,44,56,1], aLen = a.length, b = []; // 定义删除数组中指定元素的方法 Array.prototype.removeByValue = function(val) { for(var i=0; i<this.length; i++) { if(this[i] == val) { this.splice(i, 1); break; } } } // 遍历a数组 for(var i=0; i<aLen; i++){ var cur = a[Math.floor(Math.random()*a.length)]; //获取随机的元素 a.removeByValue(cur); // 从a中删除 b.push(cur); // 添加进b } console.log(b)
說下四樓不寫了 就是從數組一裡每次隨機一個 隨機出來之後從數組裡剔除 繼續隨機 吧剔除的壓入新數組裡就ok了
可以用偽隨機對a洗牌,取任意兩個位置的數字進行交換,如此進行n次達到洗牌效果,然後賦值給b。
或直接按照步驟來,如果不考慮程式碼效率的話,lodash函式庫提供的陣列操作可以讓程式碼更優雅:
想到更好的
偽隨機方法,直接隨機排序,程式碼更簡潔,運作效率高:雷雷
實作如下:
我的想法是遍歷這個數組,取得這個數組中的隨機元素,從a數組中刪除同時push進b數組,然後類推下去
雷雷
雷雷
說下四樓不寫了 就是從數組一裡每次隨機一個 隨機出來之後從數組裡剔除 繼續隨機 吧剔除的壓入新數組裡就ok了