我有一系列由推文和Instagram照片组成的数据,这些数据将以下列方式显示在网站上:
TWEET | Instagram的
INSTAGRAM | TWEET
TWEET | Instagram的
INSTAGRAM | TWEET
数组中的推文数量远远大于Instagram照片的数量,但我想确保无论Feed中的项目数量如何,结果都会以这种方式交替显示。如何最有效地重新排列阵列,以便我保持这种模式?我只能使用javascript,jquery或下划线。
答案 0 :(得分:0)
首先,您需要实现几个JS函数,如下所示:
function getElements() {
// to be implemented by you, returns an array
}
function elementIsTweet(elem) {
// to be implemented by you, returns a boolean
}
这里做了几个假设。一个重要的问题是,一旦推文或编纂已经用完,我们就会退出处理。还应注意,中间结果以阵列形式收集。对于大型集合,在构建结果数组时跟踪多个索引可能更有效。但是代码开始变得非常混乱:)
// 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;
}