2017-06-06 5 views
0

データファイル(php)には、以下のように構成された24ブロックのデータがあります。2つの連続したデータブロックをシャッフルします

//ts1 
$P[] = [0]; 
$S[] = [[1,95.8172406762736],[2,104.97526726371],[3,112.03839938973],[4,101.70457396977],]; 
$F[] = []; 
$FB[] = []; 
//ts2 
$P[] = [0]; 
$S[] = [[1,103.190939795922],[2,105.297198378469],[3,105.829786652111]]; 
$F[] = []; 
$FB[] = []; 
//ts3 
$P[] = [0]; 
$S[] = [[1,107.285278217373],[2,103.557795069809],[3,105.686758569246],[4,103.748341353355]]; 
$F[] = []; 
$FB[] = []; 

最初の12ブロックをシャッフルしてブロック13-24をシャッフルする必要があります。私が持っているコードは、24ブロックすべてを一度にシャッフルするので動作しないようです。私はそれがそう書かれるべきかどうかはわかりません。..

// DATA INITIALISATION 
// - Reads all data sets from server 
// - Generates list of objects 
// - Randomises list of objects 
function DataInit1() 
{ 
    SeriesList = []; 
    CurrentGraph.Series = 0; 

    // load all the data sets from server 
    $.getJSON("datademo.php", 
     function(Data1) 
     { 
      for(var i=0; i<Data1.length; i+=4) 
      { 
       var P = Data1[i+0]; 
       var S = Data1[i+1]; 
       var F = Data1[i+2]; 
       var FB = Data1[i+3]; 
       var NewSeries = new SeriesClass(P,S,F,FB); 
       NewSeries.SeriesNumber = (i/4)+1; 
       SeriesList.push(NewSeries); 
      } 
     } 
    ); 
// shuffle each of the series lists to a random order 
    s1 = SeriesList.length/2; 
    s2 = SeriesList.length; 
    for(var i=0; i<s1; i++) 
    { 
      var j = Math.floor(Math.random() * (i+1)); 
      var x = SeriesList[i]; 
      SeriesList[i] = SeriesList[j]; 
      SeriesList[j] = x; 
     } 
    for(var i=s1; i<s2; i++) 
    { 
      var j = Math.floor(Math.random() * (i+1)); 
      var x = SeriesList[i]; 
      SeriesList[i] = SeriesList[j]; 
      SeriesList[j] = x; 
     } 
    } 

が編集:私は次のように今それを変更しました(きれいではありませんが、私はそれを整理する時間がありません)。シリーズ1-12をランダム化しましたが、シリーズ13-24はランダム化されていません。私はそれを頻繁にコード化せず、最初のビットではうまくいくが、2番目のビットではうまくいかない理由はわかりません。

// shuffle the series list to a random order 
    for(var i=SeriesList.length-13; i>0; i--) 
    { 
     var j = Math.floor(Math.random() * (i+1)); 
     var x = SeriesList[i]; 
     SeriesList[i] = SeriesList[j]; 
     SeriesList[j] = x; 
    } 
     for(var i={from: 12, to: 23}; i>0; i--) 
    { 
     var j = Math.floor(Math.random() * (i+1)); 
     var x = SeriesList[i]; 
     SeriesList[i] = SeriesList[j]; 
     SeriesList[j] = x; 
    } 
+2

でフィドルを参照してください:私はこの質問からシャッフル方法を使用しました元の配列に抽出を戻しますか? –

+0

申し訳ありませんが、私はあなたが何を意味するのか分かりません。私のパートナーはコードを書いていましたが、今は使用できません。既存のコードを扱うための知識があります。これまでの2つの 'for()'は読み込まれず、最初の 'for() '.. – ShariDB

答えて

0

私は最も簡単な方法は、2つの配列に分割し、それらを別々にシャッフルし、それらを一緒に戻すことだと思います。その後、シャッフルを適用How can I shuffle an array?、そしてあなたは、配列の一部を抽出していない理由をHow to extend an existing JavaScript array with another array, without creating a new array?

からの配列を接合する方法は、https://jsfiddle.net/u25ta64x/1/

var SeriesList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]; 

var firstHalf = SeriesList.slice(0,13); 
var secondHalf = SeriesList.slice(13,26); 

function shuffle(a) { 
    var j, x, i; 
    for (i = a.length; i; i--) { 
     j = Math.floor(Math.random() * i); 
     x = a[i - 1]; 
     a[i - 1] = a[j]; 
     a[j] = x; 
    } 
} 

shuffle(firstHalf); 
shuffle(secondHalf) 
var shuffledList = firstHalf; 
Array.prototype.push.apply(shuffledList, secondHalf); 

console.log(shuffledList); 
関連する問題