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

js brouille complètement le tableau

var arr = [0,1,2,3,4,5,6,7]

Complètement bouleversé, il nécessite de changer la position de chaque élément

学习ing学习ing2662 Il y a quelques jours912

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

  • 仅有的幸福

    仅有的幸福2017-07-05 10:45:39

    Tout d'abord, la question ne concerne pas la réorganisation traditionnelle des tableaux. S'il s'agit d'une réorganisation traditionnelle des tableaux, bien sûr, Fisher-Yates est le premier choix. La technologie noire de Math.random() ne peut pas garantir une probabilité cohérente. voir mon article précédent https://github.com/hanzichi/u...

    Si chaque position doit être modifiée, écrivez simplement un morceau de code et cela fonctionnera à peine :

    function shuffle(a) {
      let len = a.length;
      let shuffled = Array(len);
    
      for (let i = len; i--; ) {
        let rand = ~~(Math.random() * i);
        shuffled[i] = a[rand];
        a[rand] = a[i];
      }
    
      return shuffled;
    }

    Créé un nouveau tableau et pollué le tableau d'origine, ce qui est très inélégant. Le sujet peut l'améliorer par lui-même

    .

    répondre
    0
  • PHP中文网

    PHP中文网2017-07-05 10:45:39

    Mettre le dernier en premier permettra de réaliser que chaque élément est déplacé, mais que signifie le perturber complètement ?

    var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1];
    arr.splice(arr.length - 1, 1);
    arr.unshift(last) 

    répondre
    0
  • 某草草

    某草草2017-07-05 10:45:39

    Il est impossible de garantir que chaque position changera de manière aléatoire.

    Si vous voulez le bouleverser complètement, vous ne pouvez pas garantir que les positions changeront toutes.

    La méthode la plus simple consiste à le brouiller une fois, puis à le comparer avec le tableau jusqu'à ce que les conditions soient remplies.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-07-05 10:45:39

    刚没看清 , 这个可以吗?
    function upset(arr){
         let newArr = arr.slice().sort(() => Math.random()>0.5 ? 1 : -1)
         let result = arr.some((item,index)=>{
             return item === newArr[index]
         })
         if(!result){
             return newArr
         }else{
             return upset(newArr)
         }
    }
    

    répondre
    0
  • PHP中文网

    PHP中文网2017-07-05 10:45:39

        function compare(a , b){
            Math.random > 0.5 ? return -1 ; return 1
        } 
        arr.sort(compare);
        

    répondre
    0
  • 習慣沉默

    習慣沉默2017-07-05 10:45:39

    fonction aléatoire (arr) {

        var _floor = Math.floor,
            _random = Math.random,
            len = arr.length;
        for(var i = 0; i < len - 1; ++i){
            var rand_pos = _floor(_random() * (len - i)) + i;
            if(rand_pos != i){
                var tmp = arr[i];
                arr[i] = arr[rand_pos];
                arr[rand_pos] = tmp;
            }
        }
        return arr;
    };

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:45:39

    Panoramique aléatoire, le chiffrement César est en plein essor...

    function shuffle (arr) {
      if (!Array.isArray(arr)) { return [] }
    
      var len = Math.floor(Math.random() * (arr.length - 1)) + 1
      return arr.slice(len).concat(arr.slice(0, len))
    }

    répondre
    0
  • 阿神

    阿神2017-07-05 10:45:39

    Toutes les positions les plus simples peuvent être déplacées

    > arr = [0,1,2,3,4,5,6,7]
    > arr.unshift(arr.pop())
    > arr
    [ 7, 0, 1, 2, 3, 4, 5, 6 ]
    > arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)
    [ 6, 5, 4, 0, 1, 3, 7, 2 ]
    > arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)
    [ 6, 0, 5, 3, 4, 7, 1, 2 ]

    位置全都动En fait, ce n’est pas le plus compliqué ;

    La chose la plus chaotique est probablement de mélanger les cartes au hasard, avec une certaine probabilité de garder un certain nombre inchangé, il n'y a donc aucun modèle à suivre.

    répondre
    0
  • Annulerrépondre