3

私は2つの配列を持っています
var skladby=["skladba00", "skladba01", "skladba02", "skladba03"];
var zoznam=["text00", "text01", "text02", "text03"];

この 2 つの配列を同じ順序でランダム化/シャッフルしたいのですが、[0] 位置の配列内のアイテムはその位置にとどまる必要があります。
すなわち
var skladby=["skladba00", "skladba02", "skladba03", "skladba01"];
var zoznam=["text00", "text02", "text03", "text01"];

あなたの答えのためのthx。

4

4 に答える 4

1

最初に乱数を見つけてから、両方の配列で同じスワップを行います。

        var skladby = ["skladba00", "skladba01", "skladba02", "skladba03", "skladba04", "skladba05"];
        var zoznam = ["text00", "text01", "text02", "text03", "text04", "text05"];

        if (skladby.length == zoznam.length) {
            var arr = [];
            var length = skladby.length;
            while (arr.length < length-1) {
                var randomnumber = Math.ceil(Math.random() * (length - 1));
                var found = false;
                for (var i = 0; i < arr.length; i++) {
                    if (arr[i] == randomnumber) {
                        found = true;
                        break;
                    }
                }
                if (!found)
                    arr[arr.length] = randomnumber;
            }

            var swapTemp;
            for (var i = 1; i < length; i++) {
                swapTemp = skladby[i];
                skladby[i] = skladby[arr[i - 1]];
                skladby[arr[i - 1]] = swapTemp;

                swapTemp = zoznam[i];
                zoznam[i] = zoznam[arr[i - 1]];
                zoznam[arr[i - 1]] = swapTemp;
            }
        }
于 2013-05-02T13:19:37.523 に答える
1

One 配列を Index でシャッフルしてから、その配列を使用して、これら 2 つの配列を並べ替えます

var skladby=["skladba00", "skladba02", "skladba03", "skladba01"];
var zoznam=["text00", "text02", "text03", "text01"];
var arrayShuff = new Array();
for (var i=0;i< skladby.length;i++){
arrayShuff.push(i);
}

fisherYates(arrayShuff);
function fisherYates ( myArray ) {
   var i = myArray.length, j, tempi, tempj;
   if ( i === 0 ) return false;
   while ( --i ) {
     j = Math.floor( Math.random() * ( i + 1 ) );
     tempi = myArray[i];
     tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
}
var temp_skladby = new Array();
for (i=0;i < arrayShuff.length;i++){
   temp_skladby.push(skladby[arrayShuff[i]]);
}
skladby = new Array();
skladby = temp_skladby.slice(0);
temp_skladby = new Array();
for (i=0;i < arrayShuff.length;i++){
   temp_skladby.push(zoznam[arrayShuff[i]]);
}
zoznam = new Array();
zoznam = temp_skladby.slice(0);
console.log(zoznam);
console.log(skladby);

デモを見る

于 2013-05-02T12:40:31.003 に答える
0
function shuffle(o){ 
    for(var j, x, i = o.length; i; 
    j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);   
    return o;
};

var skladby=["skladba00", "skladba02", "skladba03", "skladba01"];
var zoznam=["text00", "text01", "text02", "text03"];

// concat the first element with the shuffeld other elements
var skladbySorted = skladby.slice(0,1).concat(shuffle(skladby.slice(1,skladby.length)));
var zoznamSorted = zoznam.slice(0,1).concat(shuffle(skladby.slice(1,zoznam.length)));

console.log(skladbySorted);
console.log(zoznamSorted);

これは、4つの要素だけでなく、入力配列のすべてのサイズで機能します

シャッフル方法の功績はジェフに行く

于 2013-05-02T12:45:05.327 に答える