2014-02-17 34 views
0

我具有介於鳴叫和Instagram照片的數據的陣列將在下面的方式被顯示在網站上:安排陣列和/或下劃線

TWEET | INSTAGRAM

INSTAGRAM | TWEET

TWEET | INSTAGRAM

INSTAGRAM | TWEET

陣列中的推文數量遠遠大於instagram照片的數量,但我想確保,無論提要中的項目數量多少,結果都以這種方式交替出現。我怎樣才能最有效地重新排列數組,使我保持這種模式?我只能使用JavaScript,jQuery或下劃線。

+0

做某些tweets去某些instagrams,或配對完全隨機/任意? – AaronLS

+0

完全是任意的,只需要在類型之間交替 – mheavers

回答

0

要開始,你將需要實現幾個JS功能如下:

function getElements() { 
    // to be implemented by you, returns an array 
} 

function elementIsTweet(elem) { 
    // to be implemented by you, returns a boolean 
} 

一對夫婦的假設在這裏做。一個重要的問題是,一旦推特或instagrams已經耗盡,我們就放棄處理。還應該注意的是,中間結果是以數組形式收集的。對於大集合,在構建結果數組時可能更有效地跟蹤多個索引。但代碼開始變得相當混亂:)

// this returns a single dimensional array, 
// alternating between tweets and instragram 
function getAlternatingArray() { 
    var arr = getElements(); 

    // break array into separate parts 
    var tweets = [], instagrams = []; 
    for (var i = 0; i < arr.length; i++) { 
     if (elementIsTweet(arr[i])) { 
      tweets.push(arr[i]); 
     } else { 
      instagrams.push(arr[i]); 
     } 
    } 

    // re-combine 
    var newArr = []; 
    var isTweet = (Math.randon() < .5); 
    while (true) { 
     var currArr = isTweet ? tweets : instagrams; 
     if (currArr.length == 0) { 
      break; 
     } 
     newArr.push(currArr.shift()); 
     isTweet = !isTweet; 
    } 
    return newArr; 
} 

最後,這是非常容易的,一旦你有交替的項目類型一維數組來創建一個「棋盤」多維數組。

function checkerBoardArray(columns) { 
    // Error checking should be added to validate that columns is *even* 
    var arr = getAlternatingArray(); 
    var newArr = []; 
    for (var i = 0; i * columns < arr.length; i++) { 
     var row = []; 
     for (var j = 0; j < columns && i * j < arr.length; j++) { 
      row.push(arr[i * j]); 
     } 
     newArr.push(row); 
    } 
    return newArr; 
}