cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Satu tatasusunan mengambil elemen rawak daripada tatasusunan lain

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中文网2747 hari yang lalu707

membalas semua(7)saya akan balas

  • 高洛峰

    高洛峰2017-05-19 10:33:39

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

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:33:39

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

    balas
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:33:39

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

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:33:39

    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)

    balas
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:33:39

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

    balas
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:33:39

    <!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>
    

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:33:39

    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

    balas
    0
  • Batalbalas