JavaScript Test

配列のシャッフル(Fisher-Yates法)

テスト内容はChromeのコンソールに表示+参考ページを元にサンプル作成

フィッシャー–イェーツのシャッフルサンプル

      
        function changeArray(e) {
          newArray = e.concat();
          let i = newArray.length;
          let j;
          let temp;
          while (i) {
            j = Math.floor(Math.random() * i);
            temp = newArray[--i];
            newArray[i] = newArray[j];
            newArray[j] = temp;
          }
          return newArray;
        }
    
        let org_ary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        let result_ary = [];
        result_ary = changeArray(org_ary);
        console.log(result_ary); // (10) [9, 2, 4, 0, 8, 3, 5, 6, 1, 7]

        // テスト用に20回シャッフル
        result_ary = [];
        for (let i = 0; i < 20; i++) {
          result_ary = changeArray(org_ary);
          let zero = "0";
          if (i >= 9) {
            zero = "";
          }
          console.log(zero + (i + 1) + "回目" + " " + "result_ary: " + result_ary);
        }// 1回目~20回目のシャフルの結果
    
        // 01回目 result_ary: 1,3,8,6,9,7,4,0,5,2
        // 02回目 result_ary: 1,6,2,0,8,7,3,5,4,9
        // 03回目 result_ary: 8,1,2,0,6,7,4,9,3,5
        // 04回目 result_ary: 6,8,9,5,3,2,7,0,4,1
        // 05回目 result_ary: 8,7,4,0,9,3,1,6,5,2
        // 06回目 result_ary: 3,1,0,9,8,2,5,6,4,7
        // 07回目 result_ary: 5,7,6,2,9,4,3,0,1,8
        // 08回目 result_ary: 4,1,6,7,5,2,3,0,9,8
        // 09回目 result_ary: 8,4,5,3,0,9,7,2,1,6
        // 10回目 result_ary: 6,9,0,5,4,3,8,7,2,1
        // 11回目 result_ary: 4,9,7,3,8,6,1,2,5,0
        // 12回目 result_ary: 1,3,2,0,7,6,4,5,8,9
        // 13回目 result_ary: 3,1,9,7,6,4,0,5,2,8
        // 14回目 result_ary: 7,4,8,1,6,2,3,5,0,9
        // 15回目 result_ary: 7,8,0,2,1,4,9,3,6,5
        // 16回目 result_ary: 1,2,3,5,0,6,8,9,7,4
        // 17回目 result_ary: 8,1,3,4,6,9,5,7,0,2
        // 18回目 result_ary: 1,2,8,3,5,7,4,0,6,9
        // 19回目 result_ary: 2,1,0,9,6,5,7,3,4,8
        // 20回目 result_ary: 6,9,8,3,2,1,4,0,7,5