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 : 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
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 : 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
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 ) );
Partager