5

少し長ったらしいタイトルですが、私がやりたいことを説明しようと思います。基本的に、単一の配列に結合したい多数の配列があります。問題は、サブ配列内の項目をループして一度に 1 つずつ追加し、順序を維持する必要があることです。最終的な目標は、データをバックページで表示することです。以下に簡単な例を示します。これを使用して、私の言いたいことを伝えようとします。これはアルファベット順のソートではありません。つまり、下の例ではhをiの前に置くべきではありません。

したがって、私の例では、3 ページの結果が必要であることがわかっています。最初のページには 4 つの項目があり、2 番目のページには 4 つの項目があり、3 番目のページには 1 つの項目しかありません。

「 mix 」の最後にすべての内部アイテムの配列があるため、最終的なページングを自分で行うことができますが、配列をループして必要な方法で追加する方法がわかりません。

ページ変数を事前に取得しましたが、ループを構成する方法がわかりません。私は基本的に、各サブアレイをループして最初のアイテムを pop() し、次に次のアイテムをループし、最初のアイテムを pop() する必要があると思います。しかし、どこかで、各サブアレイに残っているアイテムの数を確認する必要があります。

たとえば、配列「1」しかない場合、理論的には、最初にa、c、e、iを含み、2番目にkのみを含む2つのページがあります。唯一の配列の長さを確認するだけなので、これは明らかに単純です。

しかし、別の配列「3 番目」 [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'];

私はできる限りこれを言葉で表現しようとしましたが、これを自分で説明する方法を理解するのに苦労しています! 残念ながら、現実の世界では、データ配列のデータ/サイズを制御できません。

ご不明な点や不明な点がございましたら、コメントを残してください。

4

3 に答える 3

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 に答える