要開始,你將需要實現幾個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;
}
做某些tweets去某些instagrams,或配對完全隨機/任意? – AaronLS
完全是任意的,只需要在類型之間交替 – mheavers