要开始,你将需要实现几个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