0

配列をランダム化するために knuth shuffle を使用しています。別の配列を追加して、同じ方法でランダム化できるようにしたいと思います。['A|1|I,B|2|II,C|3|III,D|4|IV']などのように、文字列内で配列を分離することを以前に考えていました。

stackoverflow でこれを読みましたが、knuth シャッフル用に配置する方法がわかりません。

これは、最初の配列から文字列を取得するために現在使用している JS であり、追加のコードは上記のリンクから取得されます。

Array.prototype.knuthShuffle = function()
        {
            var i = this.length, j, temp;
            while ( --i )
            {
                j = Math.floor( Math.random() * (i - 1) );
                temp = this[i];
                this[i] = this[j];
                this[j] = temp;
            }
        };

var array_chromatic = ['A', 'A%23', 'Bb', 'B', 'C', 'C%23', 'Db', 'D', 'D%23', 'Eb', 'E', 'F', 'F%23', 'Gb', 'G', 'G%23', 'Ab'],
    array_chronumb = ['Aa', 'A%23a', 'Bbb', 'Bb', 'Cc', 'C%23c', 'Dbd', 'Dd', 'D%23d', 'Ebe', 'Ee', 'Ff', 'F%23f', 'Gbg', 'Gg', 'G%23g', 'Aba'];

        function renderKnuth()
        {
            array_chromatic.knuthShuffle();
      array_chronumb.knuthShuffle();

            var audio = document.getElementById('sound');
      audio.src = 'url-redacted' + array_chromatic[0] + '.mp3';
      var str1 = array_chromatic[0]
      str2 = str1.replace("%23", '#');
            document.getElementById('knuth_data2').innerHTML = str2;// + array_accidental[0];
document.getElementById('knuth_data3').innerHTML = array_chronumb[0];
        }
4

2 に答える 2

1

順序付けられた数値の 1 つの配列をシャッフルし、シャッフルされた配列の値を他の配列のインデックスとして使用して、その配列のシャッフルを他の配列の順序に適用します。

var index_array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
index_array.knuthShuffle();

var array_chromatic_shuffled = [],
    array_chronumb_shuffled = [];

for(var i=0; i<index_array.length; ++i) {
    array_chromatic_shuffled[i] = array_chromatic[index_array[i]];
    array_chronumb_shuffled[i] = array_chronumb[index_array[i]];
}

array_chromatic = array_chromatic_shuffled;
array_chronumb = array_chronumb_shuffled;

ここで、index_arrayシャッフルされ、元の配列から読み取り、シャッフルされた配列に入力するために使用されるシャッフルされたインデックスのリストを形成します。各反復で、index_array[i]各配列から値を取得iし、対応するシャッフル形式の配列のインデックスに配置するために使用されるシャッフル インデックスです。

于 2013-10-30T20:40:11.390 に答える
0

あなたのリンクからの機能はまさにあなたが必要とするものです

function randomise(a, b)
{
    var i = a.length, j, temp;
    while ( --i )
    {
        j = Math.floor( Math.random() * (i - 1) );
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
        temp = b[i];
        b[i] = b[j];
        b[j] = temp;
    }
};

var array_chromatic = ['A', 'A%23', 'Bb', 'B', 'C', 'C%23', 'Db', 'D', 'D%23', 'Eb', 'E', 'F', 'F%23', 'Gb', 'G', 'G%23', 'Ab'];
var array_chronumb = ['Aa', 'A%23a', 'Bbb', 'Bb', 'Cc', 'C%23c', 'Dbd', 'Dd', 'D%23d', 'Ebe', 'Ee', 'Ff', 'F%23f', 'Gbg', 'Gg', 'G%23g', 'Aba'];

randomise(array_chromatic, array_chronumb);
于 2013-10-30T20:39:33.483 に答える