有点长篇大论,但我会试着解释一下我想做什么。 基本上我有一些我希望组合成一个数组的数组。麻烦的是,我需要循环遍历子数组中的项目,并一次添加1个并维护顺序。最终目标是我想显示返回分页的数据。我在下面有一个简单的例子,我将尝试传达我的意思。这不是按字母顺序排列的,即 h 不应该在底部示例中 i 之前。
所以在我的例子中,我知道我想要3页的结果。第一页应该有4个项目,第二页有4个项目,第三个页面只有1个项目。
我可以自己进行最后的分页,因为我将在其末尾添加所有内部项目的数组“ mix ”,但我无法弄清楚如何遍历我的数组和按我需要的方式添加它们。
我已经预先获得了页面变量,但我不确定如何构建循环。我想我基本上需要遍历每个子阵列并将第一个项目pop()关闭,然后循环遍历下一个项目,pop()第一个项目,依此类推。但在某个地方我需要检查每个子阵列中剩下多少项。
例如,如果我只有数组“一”我理论上会有2页,第一页包含a,c,e,i和第二只k,这个显然很简单,因为我只检查了它的长度只有阵列。
但是如果我在另一个数组中加入“第三个”[1,2,3,4,5]那么我希望混合数组是['a','b',1,'c','d ”,2 ...等];理论上每个阵列都有不同的长度,所以我显然会跳过一个空值。
var one = ['a','c','e','i','k'];
var two = ['b','d','f','h'];
var all = [one,two];
var pagecount = 3;
var mix = [];
for(var i = 0; i< all.length; i++){
var area = all[i];
}
// End result should be mix = ['a','b','c','d','e','f','i','h','k'];
我尽力尽力说出这一点,但我正在努力解决自己如何解释这个问题!不幸的是,在现实世界中,我无法控制数据阵列的数据/大小。
如有任何疑问,或有任何疑问,请发表评论。
答案 0 :(得分:3)
以下内容应该有效:
for (var i = 0; all.length !== 0; i++) {
var j = 0;
while (j < all.length) {
if (i >= all[j].length) {
all.splice(j, 1);
} else {
mix.push(all[j][i]);
j += 1;
}
}
}
在外循环的每次迭代中,我们将i
增加1,这将是每个数组中用于从中获取项目的索引。对于内循环,我们将执行以下操作之一:
i
超出了数组all[j]
的最大索引,我们就完成了该数组,因此使用all.splice(j, 1)
删除它。我们不会提前j
,因为all[j]
将在删除该位置的前一个元素后引用下一个数组。all[j][i]
项添加到mix
并将j
增加一,以便在下一次迭代时移至下一个数组。外部循环不会停止,直到all
中没有数组,这将在i
超过最长数组的长度时发生。
例如,有三个不同长度的数组:
var one = [1, 2, 3, 4];
var two = ['a', 'b'];
var three = ['U', 'V', 'W', 'X', 'Y', 'Z'];
var all = [one, two, three];
var mix = [];
// after running the above loop mix will have the following contents:
// [1, "a", "U", 2, "b", "V", 3, "W", 4, "X", "Y", "Z"]
答案 1 :(得分:2)
循环遍历外部循环中的内部索引,以及内部循环中的数组:
for (var i = 0, cont = true; cont; i++) {
cont = false;
for (j = 0; j < all.length; j++) {
if (i < all[j].length) {
mix.push(all[j][i]);
cont = true;
}
}
}
答案 2 :(得分:1)
看起来你想要一个简单的合并功能。你可以这样做
var one = ['a','c','e','i','k'];
var two = ['b','d','f','h'];
var mix = new Array();
var merging = true;
var index = 0;
while (merging) {
merging = false;
if (index < one.length) {
mix[mix.length] = one[index];
merging = true;
}
if (index < two.length) {
mix[mix.length] = two[index];
merging = true;
}
// add if blocks for arrays three, four, etc...
index++;
}
只需在循环中添加另一个if块
,就可以扩展任意数量的数组