cari

Rumah  >  Soal Jawab  >  teks badan

js benar-benar berebut tatasusunan - Limpahan Tindanan

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

Terganggu sepenuhnya, ia memerlukan kedudukan setiap elemen mesti diubah

学习ing学习ing2731 hari yang lalu957

membalas semua(8)saya akan balas

  • 仅有的幸福

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

    Pertama sekali, persoalannya bukan tentang susunan semula tatasusunan tradisional Jika susunan semula tatasusunan tradisional, sudah tentu Fisher-Yates adalah pilihan pertama Teknologi hitam Math.random() tidak dapat menjamin kebarangkalian yang konsisten lihat post saya sebelum ini https://github.com/hanzichi/u...

    Jika setiap kedudukan perlu ditukar, tulis sekeping kod dan ia hampir tidak berfungsi:

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

    Mencipta tatasusunan baharu dan mencemarkan tatasusunan asal, yang sangat tidak elegan Subjek boleh memperbaikinya sendiri

    balas
    0
  • PHP中文网

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

    Mendahulukan yang terakhir akan menyedari bahawa setiap elemen digerakkan, tetapi apakah yang dimaksudkan untuk mengganggunya sepenuhnya?

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

    balas
    0
  • 某草草

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

    Adalah mustahil untuk menjamin bahawa setiap kedudukan akan berubah secara rawak.

    Jika anda ingin mengganggunya sepenuhnya, anda tidak boleh menjamin bahawa kedudukan semua akan berubah.

    Kaedah yang lebih mudah ialah berebut sekali dan kemudian bandingkan dengan tatasusunan sehingga syarat dipenuhi.

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

    balas
    0
  • PHP中文网

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

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

    balas
    0
  • 習慣沉默

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

    kocok fungsi (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;
    };

    balas
    0
  • 我想大声告诉你

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

    Penyulitan rawak, penyulitan Caesar sedang berkembang pesat...

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

    balas
    0
  • 阿神

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

    Semua kedudukan yang paling mudah boleh dialihkan

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

    位置全都动Sebenarnya, ia bukanlah yang paling kucar-kacir;

    Perkara yang paling huru-hara mungkin merombak kad secara rawak, dengan kebarangkalian tertentu untuk mengekalkan nombor tertentu tidak berubah, jadi tiada corak untuk diikuti.

    balas
    0
  • Batalbalas