recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Un tableau prend des éléments aléatoires d'un autre tableau

Il existe un tableau a=[4,19,23,44,56,1], créez un nouveau tableau b et b sélectionne au hasard un élément à la fois dans a jusqu'à ce qu'il soit épuisé. Implémenté en JavaScript

PHP中文网PHP中文网2795 Il y a quelques jours746

répondre à tous(7)je répondrai

  • 高洛峰

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

    Vous pouvez mélanger a de manière pseudo-aléatoire, échanger les nombres dans deux positions quelconques, le faire n fois pour obtenir l'effet de mélange, puis l'attribuer à b.

    Ou suivez simplement les étapes. Si l'efficacité du code n'est pas prise en compte, les opérations sur les tableaux fournies par la bibliothèque lodash peuvent rendre le code plus élégant :

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

    J'ai pensé à une meilleure méthode pseudoaléatoire, qui est directement triée de manière aléatoire, le code est plus simple et l'efficacité de fonctionnement est élevée :

    var src = [4,19,23,44,56,1];
    
    var shuffle = src;
    shuffle.sort(function(){
        return Math.floor(Math.random() * 3) - 1;
    });

    répondre
    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);

    répondre
    0
  • 世界只因有你

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

    La mise en œuvre est la suivante :

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

    répondre
    0
  • 漂亮男人

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

    Mon idée est de parcourir ce tableau, d'obtenir des éléments aléatoires dans ce tableau, de les supprimer du tableau a et de les pousser dans le tableau b, et ainsi de suite

    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)

    répondre
    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));

    répondre
    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>
    

    répondre
    0
  • 曾经蜡笔没有小新

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

    Je ne l'écrirai pas au quatrième étage. J'en sélectionne simplement un au hasard dans le tableau, un à la fois. Après la randomisation, continuez la randomisation. ça va

    répondre
    0
  • Annulerrépondre