11548 sujets

JavaScript, DOM et API Web HTML5

Hello,

je ne sais pas si la réponse est triviale mais je sèche carrément sur une question qui a priori ne me semblait pourtant pas compliquée...

Voilà : je genère deux tableaux (A et B) et je cherche à identifier si une valeur du tableau B se trouve dans le tableau A.

J'ai trouvé inArray mais je n'arrive à rien avec...

Si une bonne âme avait un élément de réponse,
Smiley smile

Merci !

@+
Modifié par hitzerod (28 Feb 2007 - 21:11)
C'est dingue comment poster dans un forum peut stimuler Smiley smile
Bon je viens de trouver.
Evidemment c'est super simple, je ne sais pas pourquoi j'ai mis deux plombes là dessus...


var tab_A = new Array(1,2,'c');
var tab_B = new Array('a','b', 'c');
	
for (j = 0; j < tab_A.length; j++)
 {
  if (tab_A[j] == tab_B[j]) 
   {
     alert(tab_A[j]);
   }
}


Moralité : ne pas oublier de faire un chti break de temps à autre Smiley cligne
Modifié par hitzerod (28 Feb 2007 - 21:10)
Hello,

Attention, ta solution ne fonctionne que si les deux éléments identiques sont au même index dans les tableaux.

Une solution plus générale ressemblerait à ça :
function doublon(tab1, tab2) {
  for (var i = 0; i < tab1.length; ++i) {
    for (var j = 0; j < tab2.length; ++j) {
      if (tab1[ i] == tab2[j]) {
        return tab1[ i];
      }
    }
  }

  return null;
}

Modifié par Julien Royer (01 Mar 2007 - 09:48)
Je ne sais pas si Julien Royer peut qualifier sa solution de plus générale.
Elle fonctionnera à coup sûr mais est totalement inéfficace si tab1.length et tab2.length sont un tant soit peu élevés.

Si tu es pret à passer deux heures à chercher une solution, file chez l'éditeur de Raphaël ou pas loin en face au monde en tique t'acheter les fundamental algorithms de Knuth.

Tu y trouveras absolument tout ce qui fait référence en termes d'algos depuis plus de 30 ans histoire d'éviter de boucler bêtement cent fois cent fois.

En l'occurrence ici, là encore si tab.length est un peu gros et que tu dois refaire la manip à plusieurs occurrences, il conviendrait de trier les deux tableaux préalablement voir tant qu'à faire de hcoder.
Modifié par aCOSwt (28 Feb 2007 - 23:05)
aCOSwt a écrit :
Je ne sais pas si Julien Royer peut qualifier sa solution de plus générale.
Une fois encore, tu fais preuve du manque de cohérence qui fait ton charme, mais je qualifiais évidemment cette solution de plus générale par rapport à celle proposée par l'auteur du sujet.

Il est évident que pour des tableaux de taille importante, cette solution sera très peu efficace. Néanmoins, je doute que ce soit le cas en l'occurrence.

Pour ma part, je trouve ton intervention hors sujet. Si tu comptes me faire payer ce que je t'ai dit par le passé, discutons-en franchement, mais évite désormais ce genre de piques déplacées.
Modifié par Julien Royer (28 Feb 2007 - 23:05)
Julien Royer a écrit :

Attention, ta solution ne fonctionne que si les deux éléments identiques sont au même index dans les tableaux.

Exact ! Merci Julien pour la précision.

aCOSwt a écrit :
Je ne sais pas si Julien Royer peut qualifier sa solution de plus générale.
Elle fonctionnera à coup sûr mais est totalement inéfficace si tab1.length et tab2.length sont un tant soit peu élevés.

Merci pour ton intervention aCOSwt mais que veux tu dire par inefficace ?
La proposition de Julien me semble devoir fonctionner quelque soit le nombre n d'éléments contenus dans les tableaux non ?

aCOSwt a écrit :

Si tu es pret à passer deux heures à chercher une solution, file chez l'éditeur de Raphaël ou pas loin en face au monde en tique t'acheter les fundamental algorithms de Knuth.

Tu y trouveras absolument tout ce qui fait référence en termes d'algos depuis plus de 30 ans histoire d'éviter de boucler bêtement cent fois cent fois.

Merci, je note la réf, ca m'intéresse carrément de me brainbuilder en algo Smiley smile

aCOSwt a écrit :

En l'occurrence ici, là encore si tab.length est un peu gros et que tu dois refaire la manip à pluieurs occurrences, il conviendrait de trier les deux tableaux préalablement voir tant qu'à faire de hcoder.

Je n'ai pas besoin dans l'immédiat de gérer de gros tab.length mais ça risque de se produire assez vite.

Sinon que veut dire hcoder ?
Administrateur
aCOSwt a écrit :
Je ne sais pas si Julien Royer peut qualifier sa solution de plus générale.

Sa solution fonctionne dans tous les cas (à part si aucun élément identique n'est trouvé, il manque ptêt un return?), est extrêmement simple à comprendre et prend 9 lignes: c'est bien la définition de 'générale' non?
Evidemment c'est en O(N²) mais c'est bien LA fonction à laquelle on pense en premier et qu'il sera bien temps ensuite d'optimiser si on doit prendre en compte son efficacité.

hitzerod a écrit :
Sinon que veut dire hcoder ?

Pas sûr mais phonétiquement ça me fait penser à hash/table de hachage en français
Notons au passage que cette fonction était présente dans le topic en annonce du salon, les fonctions/scripts utiles.
IL vaut parfois la peine de s'y attarder.
Felipe a écrit :
Sa solution fonctionne dans tous les cas (à part si aucun élément identique n'est trouvé, il manque ptêt un return?)
Certes, je l'ai ajouté. Ceci dit, une fonction sans return explicite en JavaScript est équivalente à "return undefined;". Mais c'est peu lisible...
Modifié par Julien Royer (01 Mar 2007 - 09:49)
QuentinC a écrit :
Notons au passage que cette fonction était présente dans le topic en annonce du salon, les fonctions/scripts utiles.
IL vaut parfois la peine de s'y attarder.

Hello,
je suis bien d'accord mais hier comme maintenant, j'ai eu beau chercher je n'ai rien trouvé...

En tout cas merci à tous pour vos interventions !
Smiley smile
Modifié par hitzerod (01 Mar 2007 - 13:02)
a écrit :

je suis bien d'accord mais hier comme maintenant, j'ai eu beau chercher je n'ai rien trouvé...

C'est pour ça qu'il y a une fonction "rechercher dans ce sujet" en haut de chaque page.
Encore que, dans ce cas précis, un simple Ctrl+F suffit.
QuentinC a écrit :

C'est pour ça qu'il y a une fonction "rechercher dans ce sujet" en haut de chaque page.
Encore que, dans ce cas précis, un simple Ctrl+F suffit.


Caramba ! Je l'avais loupé...
Merci !
Smiley smile