javascript - Satu tatasusunan mengambil elemen rawak daripada tatasusunan lain
PHP中文网
PHP中文网 2017-05-19 10:31:39
0
7
696

Terdapat tatasusunan a=[4,19,23,44,56,1], cipta tatasusunan baharu b dan b secara rawak memilih satu elemen pada satu masa daripada a sehingga ia habis. Dilaksanakan dalam JavaScript

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(7)
小葫芦

Anda boleh mengocok a dengan pseudo-rawak, menukar nombor dalam mana-mana dua kedudukan, lakukan ini sebanyak n kali untuk mencapai kesan kocok, dan kemudian tetapkannya kepada b.

Atau hanya ikut langkah Jika kecekapan kod tidak dipertimbangkan, operasi tatasusunan yang disediakan oleh perpustakaan lodash boleh menjadikan kod lebih elegan:

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;
    });
}

Saya memikirkan pseudokaedah rawak yang lebih baik, yang diisih terus secara rawak, kodnya lebih ringkas dan kecekapan operasinya tinggi:

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];
var b=[];
var c=[0,0,0,0,0,0];
var aLen = a.length;
while (c.indexOf(0)!=-1){
    var randomNum = Math.floor(Math.random()*aLen);
    if (c[randomNum] == 0){
        b.push(a[randomNum]);
        c[randomNum]=1
    }
}
console.log(b);
世界只因有你

Pelaksanaannya adalah seperti berikut:

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);
漂亮男人

Idea saya adalah untuk merentasi tatasusunan ini, dapatkan elemen rawak dalam tatasusunan ini, padamkannya daripada tatasusunan a dan tolaknya ke dalam tatasusunan b, dan seterusnya

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)
滿天的星座
   var a=[4,19,23,44,56,1];
    function randomSelect(str){
        var leng= a.length;
        var b=[];
      while(leng!=0){
          b.push(a.splice(Math.random()*leng,1).join())
          leng--;
      }
       return b;
    }
    console.log(randomSelect(a));
淡淡烟草味
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script>
      //有一个数组a=[4,19,23,44,56,1],新建一个数组b,b从a中一次随机选取一个元素,取完为止。用JavaScript实现
      var a = [4,19,23,44,56,1];
      var b = [];

      function findInArr(num, arr){
        for(var i=0; i<arr.length; i++){
          if(num == arr[i]){
            return true;
          }
        }
        return false;
      }

      function rnd(m,n){
        return m + Math.floor(Math.random()*(n-m));
      }

      function randomPass(arr){
        var len = arr.length;
        var rndIndex = rnd(0,len-1);
        console.log(rndIndex);
        var temp = arr[rndIndex];
        if(!findInArr(temp,b)){
          b.push(temp);
          arr.splice(rndIndex,1);
          if(arr.length > 0){
            randomPass(arr);
          }
        }
      }

      randomPass(a);
      console.log(b); // [44, 56, 19, 23, 4, 1] (每次随机)
      console.log(a); // []

    </script>
  </body>
</html>
曾经蜡笔没有小新

Saya tidak akan menulisnya ke tingkat empat, saya hanya memilih satu daripada tatasusunan secara rawak selepas rawak, keluarkannya dari tatasusunan Hanya tolak yang dikeluarkan ke dalam tatasusunan oklah

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan