Boucle à travers plusieurs tableaux, en les combinant à un seul tableau,le maintien de l'index à l'intérieur de la subarray
Peu longue haleine titre, mais je vais essayer d'expliquer ce que je veux faire.
Fondamentalement, j'ai un certain nombre de tableaux que je veux combiner en un seul tableau. Le problème est que j'ai besoin d'une boucle sur les éléments de la sous-tableaux et ajouter 1 à un moment et à maintenir l'ordre. L'objectif final est que je veux afficher les données paginées. J'ai un exemple simple ci-dessous que je vais utiliser pour essayer de transmettre ce que je veux dire. Ce n'est pas un tri alphabétique-je.e h ne devrait pas être avant je dans le fond exemple.
Donc, dans mon exemple je sais que je veux 3 pages de résultats. La première page doit avoir les 4 éléments, la deuxième page 4 points et le troisième 1 point.
Je peux faire la finale de pagination moi-même que je vais avoir un tableau de tous les intérieurs éléments à la fin de "mélange", mais je ne peux pas savoir comment faire une boucle à travers mes tableaux et de les ajouter dans la manière dont j'ai besoin.
J'ai la page de la variable d'avance mais je ne suis pas sûr de savoir comment la structure de la boucle. Je pense que j'ai fondamentalement besoin d'une boucle sur chaque subarray et de la pop() le premier élément, puis faire une boucle par la suivante, pop() le premier élément et ainsi de suite. Mais quelque part, j'ai besoin de vérifier le nombre d'éléments dans chaque subarray.
Par exemple si seulement j'avais tableau "un" je, en théorie, 2 pages de la première contenant a,c,e,i et le deuxième seulement k, c'est évidemment assez simple comme je viens de vérifier la longueur de la seule matrice.
Mais si j'ai ajouté dans un autre tableau "troisième" [1,2,3,4,5], alors je m'attends à ce que le mélange tableau ['a','b',1,'c','d',2...etc]; Chacun de ces tableaux pourrait, en théorie, sont de différentes longueurs alors je serait évidemment ignorer une valeur vide.
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'];
J'ai essayé de parole de ce du mieux que je peux, mais j'ai du mal à obtenir ma tête autour de comment l'expliquer moi-même! Malheureusement, dans le monde réel, je n'ai pas de contrôle sur les données ou la taille de l'tableaux de données.
Des questions ou si quelque chose n'est pas clair, alors s'il vous plaît laissez un commentaire.
OriginalL'auteur TommyBs | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
La suivante devrait fonctionner:
À chaque itération de la boucle externe, nous avons augmenter
i
par un, ce sera de l'index de chaque tableau pour saisir un élément de. Pour la boucle interne nous vous effectuez l'une des opérations suivantes:i
est au-delà de l'indice maximum de la matriceall[j]
nous sommes effectuée auprès de la matrice de sorte qu'il est retiré à l'aide deall.splice(j, 1)
. Nous ne nous avance pasj
parce queall[j]
va se référer à la matrice suivante, après l'élément précédent, à cet endroit a été supprimé.all[j][i]
àmix
et augmenterj
par un pour passer à la prochaine tableau sur la prochaine itération.L'extérieur de la boucle ne s'arrête pas jusqu'à ce qu'il n'y a pas de tableaux à gauche dans
all
, ce qui va se passer quandi
a dépassé la longueur de la plus grande matrice.Par exemple avec trois tableaux, tous de différentes longueurs:
var all = ["foo" + one + "bar", two, three];
OriginalL'auteur Andrew Clark
Boucle à travers l'intérieur de l'index dans la boucle externe, et les matrices dans la boucle intérieure:
OriginalL'auteur Guffa
Il semble que vous souhaitez une simple fonction de fusion. Vous pourriez le faire de cette
Peut être étendue pour un certain nombre de tableaux en ajoutant simplement un autre si le bloc à l'intérieur de la boucle
OriginalL'auteur jonhopkins