2010-03-10 4 views
1

TL DR; Quel est le moyen le plus efficace de trier et de comparer les valeurs dans plusieurs tableaux? Bon, alors nous supposerons quelques constantes pour rendre cette chose simple var a = [1, 2, 3, 4, 5, 6], b = [0, 9, 8, 7, 6 88, 99, 77], i, j; Maintenant, si je voulais voir si une valeur dans a est égale à une autre valeur dans b, je devrais trier 6 fois l'une de ces tables. C'est beaucoup de travail, et il semblerait qu'il devrait y avoir un moyen plus efficace de le faire. Pour ceux qui ont besoin d'une aide visuelle ici vous (et oui je sais à propos - et ++ je n'aime pas « utiliser em):Javascript: boucle multiple de tableau

for (i = a.length - 1; i > -1; i -= 1) { 
    for (j = b.length - 1; j > -1; j -= 1) { 
     if (a[i] === b[j]) { 
      return b[j]; 
     } 
    } 
}

Le tableau B se parcourait une fois pour chaque élément R. Encore une fois, il y a certainement un moyen plus efficace d'accomplir cette tâche?

-Akidi

+0

TL est Wtf DR? Je vois ça partout. –

+1

Trop long; n'a pas lu – rahul

Répondre

3

Cela dépend de la taille de vos tableaux d'entrée (plusieurs là des compromis) - vos boucles imbriquées sont les plus simples pour les petites entrées comme vos exemples. Si vous avez d'énormes tableaux et avez le contrôle de leur construction, pensez à conserver une carte (Objet dans JS) autour d'un ensemble de recherche (si vous créez a dans une boucle de toute façon, vous pouvez construire l'ensemble dans parallèle.)

var setA = {}; 
for (int i = 0; i < a.length; i++) { 
    setA[a[i]] = true; 
} 

vous pouvez voir si quelque chose existe dans l'ensemble par la vérification juste setA[? ].

De même avec B, ou avec les deux ensemble, etc., selon vos besoins.

+0

Appréciez les commentaires, l'ordinateur s'est écrasé si malheureusement n'a pas pu se féliciter plus tôt. Voterait votre réponse utile (ainsi que le gars ci-dessous), mais apparemment besoin de 15 représentants pour le faire. Tant pis. – Akidi

+0

Enfin obtenu 15 rep^_^Donc voté les deux comme je l'ai dit il y a plusieurs mois. – Akidi

1

Peut-être que quelque chose comme ça peut aider?

var a = [1, 2, 3, 9, 5, 0], b = [0, 9, 8, 7, 6, 88, 99, 77]; 
var a_dict = {}, l = a.length; 

for (var i=0; i < l; i++) { 
    a_dict[a[i]] = 1; 
} 

l = b.length; 
for (var i=0; i < l; i++) { 
    if(!!a_dict[b[i]]){ 
    console.log(b[i]); 
    } 
} 

Vous pouvez convertir un tableau à l'objet "dict-like" et comparer les autres avec elle ...