Suite à cette discussion, j'ai codé (rapidement) un prototype permettant de comparer l'égalité de deux tableaux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Array.prototype.isEqual = function(val){
	if(!val.join){return false;}
	if(this.length != val.length){return false;}
	var long = val.length;
	for(var i = 0; i < long; i++){
		if(val[i].join && this[i].join){
			if(!this[i].isEqual(val[i])){
				return false;
			}
		}
		else if(this[i] != val[i]){
			return false;
		}
	}
	return true;
}
Le prototype compare : les valeurs simples du tableau (donc en gros, les chaines, nombres et booléens) ainsi que les valeurs de type tableaux (et ce quel que soit le niveau d'imbrication).
En revanche, si le tableau contient d'autres objets complexes que des tableaux (objets, fonctions, regexp, ...), la fonction renverra false.

Enfin, il est possible d'améliorer le code (si vous vous le sentez ) en utilisant la méthode forEach() récemment apparue dans toute une floppée de méthodes utilitaires sur les tableaux. Cela améliorera les performances (qui doivent actuellement être médiocres sur de grosses imbrications) mais nécessitent un double codage pour les navigateurs n'implémentant pas forEach().

Exemples d'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
alert([1,2,3].isEqual([1,2,4]));
alert([1,2,3].isEqual([1,2,3]));
alert([1,['a','b','c'],2].isEqual([1,['a','b'],2]));
alert([1,['a','b','c'],2].isEqual([1,['a','b','c'],2]));