我有两个阵列
var skladby=["skladba00", "skladba01", "skladba02", "skladba03"];
var zoznam=["text00", "text01", "text02", "text03"];
我想以相同的顺序随机化/混洗这两个数组,但是[0]位置的数组中的项必须保持在它们的位置上。
即
var skladby=["skladba00", "skladba02", "skladba03", "skladba01"];
var zoznam=["text00", "text02", "text03", "text01"];
你的答案。
答案 0 :(得分:2)
要更改阵列, 首先得到洗牌顺序,然后将新的排列添加到现有数组的末尾。
然后从索引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);
/ *返回值
skladba00,skladba03,skladba01,skladba02
text00,text03,text01,text02 * /
答案 1 :(得分:1)
使用Index随机播放一个数组然后使用该数组重新排序这两个数组
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);
答案 2 :(得分: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;
}
}
答案 3 :(得分: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个元素
对shuffle方法的信用转到Jeff