javascript - 一个数组从另一个数组中随机取元素
PHP中文网
PHP中文网 2017-05-19 10:31:39
0
7
686

有一个数组a=[4,19,23,44,56,1],新建一个数组b,b从a中一次随机选取一个元素,取完为止。用JavaScript实现

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
小葫芦

可以用伪随机对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了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!