11548 sujets

JavaScript, DOM et API Web HTML5

Ave !

Pourriez-vous m'indiquer comment on peut determiner que deux arrays contiennent les memes elements, SVP ?

Merci de votre aide !
Modifié par Grand Mamamouchi (23 May 2005 - 08:42)
Array1 === Array2

comparaison bit à bit.

je ne sais pas si ça marche avec les objets array, mais ça vaut le coup d'essayer, avec un if...

le temps de rédiger un p'tit exemple pour voir, et je confirme...
Bonjour,

PhP dispose de plusieurs fonctions permettant de comparer deux tableaux.

La plus simple dans ton cas est
array_diff(array1,array2)
qui va retourner toutes les valeurs de array1 absentes de array2.

Conclusion si les deux tableaux sont différents tu le sauras et en prime tu auras les valeurs en causes.

Pour des comparaisons plus précises voir l'objet ARRAY

jp
Hé bien ce que je pensais ne marche pas...

Sinon, tu peux créer une fonction de comparaison... (j'la fais, j'la teste et j'reviens Smiley ravi )...

edit: y a de l'orage chez moi, je ferai ça demain... Smiley sweatdrop Smiley confus
Modifié par Lisarael (20 May 2005 - 23:43)
Merci de vos reponses !

Je voudrais trouver une solution javascript !

J'ai ma petite idee : comparer les arrays transformes en strings; encore faut-il dedoublonner les arrays prealablement !

		function compareArray(a1, a2)
		{
			if (a1.length != a2.length) {
				return false;
			} else {
				for (var a = 0; a < a1.length; ++a) {
					if (a1[a] != a2[a]) {
						return false;
					}
				}
			}
			return true;
		}


Après faudrait faire un appel récursif sur les a1[a] et a2[a] s'ils sont du type Array eux même.
Modifié par Olivier (21 May 2005 - 00:11)

function compareArray(a1, a2)
{
	if (a1.length != a2.length) {
		return false;
	} else {
		for (var a = 0; a < a1.length; ++a) {
			if (is_array(a1[a])) {
				if (!is_array(a2[a])) {
					return false;
				} else {
					return compareArray(a1[a], a2[a]);
				}
			} else if (a1[a] != a2[a]) {
				return false;
			}
		}
	}
	return true;
}

function is_array(variable)
{
	var source = variable.toSource();
	return (source.search(/^\[([^,]*,)+[^,]*\]/) != -1);
}


Voilà, y a plus qu'à s'assurer que ça marche pour tous les cas, mais j'ai testé avec des array imbriqués sous plusieurs niveau et ça roule.

Si tu veux des explications, y a qu'à demander.

Pour la foncion is_array, j'ai pris ça sur :
http://www.aidejavascript.com/article30.html
Megalol Olivier... Smiley ravi

Hier, je me suis déconnecté pasqu'il y avait un gros orage au-dessus de chez moi, et j'ai déjà grillé une alim, pas deux... lol

Pendant l'orage, j'ai écris sur papier le code d'une nouvelle classe de l'objet Array pour comparer deux tableaux entre eux, puis, quand l'orage est passé, je l'ai codé mais pas envoyé sur le net...

Les grands esprits se rencontrent, nos codes sont quasiment les mêmes...

Sur la page d'exemple, il y a un lien vers le fichier js de la méthode, pour ceux qui veulent pas retaper tout; et tout est expliqué.

Voilà, voilà...
Modifié par Lisarael (21 May 2005 - 10:20)
Lisarael a écrit :
M
Les grands esprits se rencontrent, nos codes sont quasiment les mêmes...


Tu m'etonnes, on est des mega bête Smiley langue lol

J'ai regardé rapido ton truc, tu gères aussi les array imbriqués ? j'ai pas eu l'impression à première vue, mais j'ai vraiment regardé rapido.

Le faire comme une méthode de l'objet array, c'est pas plus mal oui.
Ma version est sûrement optimisable au niveau de la quantité de code mais j'ai fait ça vite fait.

Si tu veux, t'as qu'à nous mettre ça dans le topic qui est mis en épinglé sur le forum JS, code et scripts utiles.
Tu expliques juste la routine, met le code et renvoi un lien vers ta page. enfin si tu veux.
j'ai pas essayé les tableaux imbriqués...

c'est comme les départementales, j'les aime pas... lol

edit: j'vais rajouter la gestion des tableaux imbriqués, c'est un question de quelques lignes de codes en plus, pis je le mettrai dans le topic en post-it...

edit2: voilà, c'est corrigé, j'ai intégré les tableaux imbriqué, plus qu'à poster le truc dans le post-it...
Modifié par Lisarael (21 May 2005 - 12:23)
oui, faudrait voir avec des tableaux imbriqués si ça colle toujours...

(mais j'aime bien faire compliqué quand on peut faire simple, lol
Bonjour !

Cette question ne m'interesse plus sur le plan pratique : je n'ai plus besoin de cette fonctionnalite pour produire l'effet que j'ai choisi.

Sur le plan theorique, si je devais comparer deux arrays, je dedoublonnerais, je trierais, et je comparerais les join.

A +.
À quoi ça te sert de venir le dire, gros malin ?

Genre "bon, vous avez bien bossé, mais de toutes façons, je n'utilise pas vos idées, j'en ai plus rien à f..."

Merci, c'est très civique.
Pas d'énervement Lisarael, au moins, Mamamouchi a averti qu'il n'était pas necessaire de poursuivre vos recherche.

Comme le sujet et clos et que ce n'est vraiment pas la peine de s'enerver pour si peux, je ferme le sujet :)