2013-05-02 3 views
3

에 같은 순서로 두 배열 셔플 var skladby=["skladba00", "skladba01", "skladba02", "skladba03"];
var zoznam=["text00", "text01", "text02", "text03"];내가 두 배열 <br>이 자바 스크립트

I [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 개 배열을 섞어서 그 배열이 두 배열

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); 

See Demo

+0

fisherYates 메소드는 http://sedition.com/perl/javascript-fy.html에서 참조 할 수 있습니다. – Dineshkani

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 개의 모든 요소 크기에 일하는 것이 순서를 사용

셔플 링 방법은 Jeff

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; 
      } 
     }