5

有点冗长的标题,但我会尝试解释我想要做什么。基本上,我有许多想要组合成一个数组的数组。问题是,我需要遍历子数组中的项目并一次将它们添加 1 并保持顺序。最终目标是我想显示回页的数据。我在下面有一个简单的例子,我将用它来尝试传达我的意思。这不是按字母顺序排序,即在底部示例中h不应该在i之前。

所以在我的例子中,我知道我想要 3 页的结果。第一页应该有 4 项,第二页 4 项,第三页只有 1 项。

我可以自己进行最后的分页,因为我将在它“混合”的末尾有一个所有内部项目的数组,但我不知道如何循环遍历我的数组并按照我的需要添加它们。

我已经预先获得了 page 变量,但我不确定如何构建循环。我想我基本上需要遍历每个子数组并 pop() 第一项关闭,然后遍历下一项, pop() 第一项等等。但是在某个地方我需要检查每个子数组中剩下多少项目。

例如,如果我只有数组“one”,理论上我会有 2 页,第一页包含 a、c、e、i,第二页只有 k,这显然很简单,因为我只检查唯一数组的长度。

但是如果我在另一个数组中添加“第三个” [1,2,3,4,5] 那么我希望混合数组是 ['a','b',1,'c','d',2 ...ETC]; 这些数组中的每一个在理论上都可以有不同的长度,所以我显然会跳过一个空值。

 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'];

我已经尽我所能地表达了这一点,但我正在努力弄清楚如何自己解释这一点!不幸的是,在现实世界中,我无法控制数据数组的数据/大小。

有任何问题或不清楚的地方,请发表评论。

4

3 回答 3

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;
        }
    }
}

在外部循环的每次迭代中,我们都会增加i1,这将是每个数组中的索引以从中获取项目。对于内部循环,我们将执行以下操作之一:

  • 如果索引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"]
于 2013-09-25T16:18:36.690 回答
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;
    }
  }
}
于 2013-09-25T16:13:07.073 回答
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 块来扩展任意数量的数组

于 2013-09-25T16:14:42.800 回答