有一个数组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了