Détecte si l'un des array d'un array d'array contient le contenu (l'ordre des éléments étant respecté) d'un autre array. Le contenu des arrays peut être alphanumérique.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * SPaceFrog
 * [RegExp]remplacement / suppression de caractères accentués ou autres ...
 * "http://www.developpez.net/forums/d1018129/webmasters-developpement-web/\
contribuez/regexp-remplacement-suppression-caracteres-accentues-autres/"
 */
function replaceSpec(Texte){
	var TabSpec = {"à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","è":"e","é":"e","ê":"e","ë":"e","ç":"c","ì":"i","í":"i","î":"i","ï":"i","ù":"u","ú":"u","û":"u","ü":"u","ÿ":"y","ñ":"n","-":" ","_":" "},
		reg=/[àáâãäåòóôõöøèéêëçìíîïùúûüÿñ_-]/gi;
 
	return Texte.replace(reg, function(){
		return TabSpec[arguments[0].toLowerCase()];
	}).toLowerCase();
}
 
/*
 * Tri alphanumérique
 * 
 * 0 : égal
 * 1 : supérieur
 * 2 : inférieur
 */
var sort = function( a, b ){
	var x = parseInt( a, 10 ),
		y = parseInt( b, 10 ),
		c1 = replaceSpec( String( a ) ),
		c2 = replaceSpec( String( b ) );
 
	if ( isNaN( x ) || isNaN( y ) ){
		if ( c1 > c2 ){
			return 1;
		} else if( c1 < c2 ){
			return -1;
		} else {
			return 0;
		}
	} else {
		return( x - y );
	}
};
 
/*
 * containsArray( array, arrayOfArrays )
 *
 * Détecte si l'un des array d'un array d'array contient 
 * le contenu (l'ordre des éléments étant respecté) 
 * d'un autre array.
 * 
 * Le contenu des arrays peut être alphanumérique.
 * 
 * Daniel Hagnoul
 * 
 * Code v1.0.0 2013-01-19
 * 
 * Retourne un array contenant quatre éléments : 
 * [ true, i, n, m ] avec :
 * i = l'index de l'array qui contient l'array recherché,
 * n = le début de l'array recherché dans i, 
 * m = la fin de l'array recherché dans i.
 * 
 * En cas d'échec : [ false, -1, -1, -1 ].
 */
function containsArray( array, arrayOfArrays ){
	var tabBool = [],
		n = 0,
		bool = false,
		arrayLength = array.length,
		result = [ false, -1, -1, -1 ];
 
	$.each( arrayOfArrays, function( i, item ){
 
		$.each( item, function( j, jtem ){
 
			bool = ( sort( jtem, array[ j - n ] ) == 0 );
 
			// debug
			//console.log( i, j, n, item, array, jtem, array[ j - n ] );
 
			if ( ! bool ){
				n = j;
				tabBool = [];
 
				bool = ( sort( jtem, array[ j - n ] ) == 0 );
 
				// debug
				//console.log( i, j, n, item, array, jtem, array[ j - n ] );
 
				if ( ! bool ){
					n = j+1;
					tabBool = [];
				}
			}
 
			if ( bool ){
				tabBool.push( bool );
			}
 
			if ( tabBool.length == arrayLength ){
				return false; // pour sortir du each !
			}
		});
 
		if ( ( tabBool.length == array.length ) && ( $.inArray( false, tabBool ) == -1 ) ){
			result = [ true, i, n, n + arrayLength - 1 ];
			return false; // pour sortir du each !
		}
 
		n = 0;
		tabBool = [];
	});
 
	return result;
}
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var combinaisons = [
		[ 250, "échangeur", 9, "bonjour", "25", "échangeur", "bonjour", 25, "échangiste", "9" ],
		[ "9", 9, 5, "3", 6, "1", 5, 3, 7, 8, 9, "3", 4, 6, "2", 1, "9", 8, 5, 8, 9, 6, 1, "2" ],
		[ 2, "25", 3, 25, "25", 5, 60, "25", 200, 60, "25" ],
		[1,1,1,1,0,0,1,1,1,1],
		[1,1,1,1,1,0],
		[1,1,1,1,0,1,1,1,0,1,1,0],
		[1,1,0,1,1,0],
		[1,1,0,1,0,1]
	],
	saisiecomb1 = [ 3, "7" , 8 ],
	saisiecomb2 = [ "échangeur", "9", "bonjour" ],
	saisiecomb3 = [ 60, 25, 200 ],
	saisiecomb4 = [1,1,1,1,0,1],
	saisiecomb5 = [1,1,0,"1",1,"1"];
 
console.log( containsArray( saisiecomb1, combinaisons ) );
console.log( containsArray( saisiecomb2, combinaisons ) );
console.log( containsArray( saisiecomb3, combinaisons ) );
console.log( containsArray( saisiecomb4, combinaisons ) );
console.log( containsArray( saisiecomb5, combinaisons ) );