Utilisation de jQuery pour comparer deux tableaux d'objets Javascript
J'ai deux tableaux de JavaScript les Objets que j'aimerais comparer pour voir si elles sont la même chose. Les objets ne peuvent pas (et très probablement ne sera pas) être dans le même ordre dans chaque tableau. Chaque tableau ne devrait pas avoir plus de 10 objets. Je pensais que jQuery pourrait avoir une solution élégante à ce problème, mais je n'étais pas en mesure de trouver beaucoup en ligne.
Je sais qu'une brute imbriquée $.each(array, function(){})
solution pourrait fonctionner, mais est-il construit en fonction que je ne suis pas au courant?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Il est un moyen facile...
Si le ci-dessus renvoie la valeur true, les deux tableaux sont identiques, même si les éléments sont dans un ordre différent.
REMARQUE: Cela ne fonctionne que pour les versions de jquery < 3.0.0 lors de l'utilisation d'objets JSON
[0,1] == {0:0,1:1,length=2}
$(arr1).not(arr2).length == 0
n'est pas assez?not
est une fonction de filtre, pas d'une égalité de fonction. Essayez avec[1,2]
et[1]
. Dans une commande, vous obtiendrez[]
, et dans un autre, vous aurez[2]
.not
ne fonctionne plus avec des objets génériques comme des 3.0.0-rc1. Voir github.com/jquery/jquery/issues/3147json Object
? Comment est-il différent deObject
?J'étais également à la recherche de cette question aujourd'hui, et trouve:
http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD
Ne sais pas si c'est une bonne solution si ils mentionnent certains facteurs de performance pris en compte.
J'aime l'idée de jQuery méthode d'assistance.
@David, je préfère voir votre méthode de comparaison pour le travail comme:
Je ne fait pas de sens pour moi à faire:
où a et b sont des matrices. Normalement, lorsque vous $(quelque chose) vous seriez de passage d'un sélecteur de chaîne de travailler avec des éléments du DOM.
Également en ce qui concerne le tri et la mise en mémoire cache le tri des tableaux:
Il semble que ce que nous devons faire est de copier les tableaux avant de travailler sur eux. La meilleure réponse que j'ai pu trouver pour la façon de le faire en jQuery moyen était par nul autre que John Resig ici sur LE! Quel est le moyen le plus efficace de profondeur cloner un objet en JavaScript? (voir les commentaires sur sa réponse pour le choix de la version de l'objet de clonage recette)
Dans ce cas, je pense que le code serait:
Mon approche était tout à fait différents, je les aplatis, les deux collections en utilisant JSON.stringify et utilisé une normale de comparaison de chaîne pour vérifier l'égalité.
I. e.
NB: Veuillez noter que sa méthode suppose que les deux Collections sont triés de manière similaire, si non, il serait de vous donner un résultat faux!
Convertir à la fois tableau de string et de comparer
J'ai trouvé cette discussion parce que j'ai besoin d'un moyen de profondeur de comparer les tableaux et les objets. En utilisant les exemples ici, je suis venu avec la suivante (divisé en 3 méthodes pour plus de clarté):
Tests
Dans mon cas par rapport tableaux contiennent seulement numéros de et chaînes. Cette solution a fonctionné pour moi:
Nous allons tester!
Je ne pense pas qu'il y a un bon "jQuery" à la façon de le faire, mais si vous avez besoin de l'efficacité, de la carte de l'un des tableaux à l'aide d'une clef (un des champs d'objet), et ensuite faire la comparaison en boucle dans l'autre tableau et comparer par rapport à la carte ou tableau associatif, vous avez juste construit.
Si l'efficacité n'est pas un problème, il suffit de comparer tous les objets dans Une pour chaque objet dans B. Tant que |A| et |B| sont de petite taille, vous devriez être bien.
Bien, si vous voulez comparer le contenu de deux tableaux, il y a une utile fonction jQuery $.inArray()
Changement de tableau à la chaîne et comparer
La belle doublure de Sudhakar R que jQuery méthode globale.
J'ai également trouvé ce que quand on cherche à faire quelques matrice de comparaisons avec jQuery. Dans mon cas, j'ai eu chaînes qui je savais être des tableaux:
Mais ce qui m'importait si c'était un jeu complet ou seulement une partie du match, alors j'ai utilisé quelque chose comme ce qui suit, basé sur Sudhakar R réponse:
Si des doublons des matières telles que
[1, 1, 2]
ne doit pas être égal à[2, 1]
mais doit être égale à[1, 2, 1]
, voici une solution de comptage de référence:Voici le violon pour jouer avec.
JS:
HTML:
Essayer cette