2014-02-17 44 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; 
}