Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中按相同顺序洗牌两个数组_Javascript_Arrays_Shuffle - Fatal编程技术网

在javascript中按相同顺序洗牌两个数组

在javascript中按相同顺序洗牌两个数组,javascript,arrays,shuffle,Javascript,Arrays,Shuffle,我有两个数组 var skladby=[“skladba00”、“skladba01”、“skladba2”、“skladba03”] var zoznam=[“text00”、“text01”、“text02”、“text03”] 我想以相同的顺序随机/洗牌这两个数组,但是[0]位置的数组中的项目必须保持在它们的位置上即 var skladby=[“skladba00”、“skladba2”、“skladba03”、“skladba01”] var zoznam=[“text00”、“text

我有两个数组
var skladby=[“skladba00”、“skladba01”、“skladba2”、“skladba03”]
var zoznam=[“text00”、“text01”、“text02”、“text03”]

我想以相同的顺序随机/洗牌这两个数组,但是[0]位置的数组中的项目必须保持在它们的位置上

var skladby=[“skladba00”、“skladba2”、“skladba03”、“skladba01”]
var zoznam=[“text00”、“text02”、“text03”、“text01”]


谢谢你的回答。

用索引洗牌一个数组,然后使用该数组对这两个数组重新排序

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);
var skladby=[“skladba00”、“skladba2”、“skladba03”、“skladba01”];
var zoznam=[“text00”、“text02”、“text03”、“text01”];
var arrayShuff=新数组();
对于(var i=0;i

这将适用于所有大小的输入数组,而不仅仅是4个元素


“按顺序排列”方法首先查找随机数,然后在两个数组中进行相同的交换:

        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;
            }
        }
var skladby=[“skladba00”、“skladba01”、“skladba2”、“skladba03”、“skladba04”、“skladba05”];
变量zoznam=[“text00”、“text01”、“text02”、“text03”、“text04”、“text05”];
if(skladby.length==zoznam.length){
var-arr=[];
var length=skladby.length;
而(arr.length
要在适当位置更改阵列, 首先获得无序排列的顺序,并将新排列添加到现有阵列的末尾

然后从索引1拼接到新排列开始的位置(原始长度)

索引0处的元素不受影响

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

var i=0, len= skladby.length, next, order=[];
while(i<len)order[i]= ++i; //[1,2,3...]
order.sort(function(){return Math.random()-.5});


for(i= 0; i<len; i++){
    next= order[i];
    skladby.push(skladby[next]);
    zoznam.push(zoznam[next]);
}
skladby.splice(1, len);
zoznam.splice(1, len);
var skladby=[“skladba00”、“skladba01”、“skladba2”、“skladba03”];
var zoznam=[“text00”、“text01”、“text02”、“text03”];
var i=0,len=skladby.length,next,order=[];

然而(我可以假设字符串上缺少引号是一个打字/粘贴问题吗?fisherYates方法是从
var skladby= ["skladba00", "skladba01", "skladba02", "skladba03"];
var zoznam= ["text00", "text01", "text02", "text03"];

var i=0, len= skladby.length, next, order=[];
while(i<len)order[i]= ++i; //[1,2,3...]
order.sort(function(){return Math.random()-.5});


for(i= 0; i<len; i++){
    next= order[i];
    skladby.push(skladby[next]);
    zoznam.push(zoznam[next]);
}
skladby.splice(1, len);
zoznam.splice(1, len);