IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comparaison éléments dans un même tableau


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut Comparaison éléments dans un même tableau
    Bonjour,

    Je vous sollicite car j'ai un petit problème à régler. En fait, je pense pouvoir m'en sortir, mais ce ne serait vraiment pas optimisé, donc je voudrais savoir si il existe quelque chose de plus simple, léger et subtil

    Donc voilà, j'ai dans un tableau des données du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tabHoraires=["HoraireDebut1","HoraireFin1","HoraireDebut2","HoraireFin2", [...] "HoraireDebutn","HoraireFinn"]
    J'aimerais pouvoir récupérer la position des différentes horaires pour lesquelles il y a des enchevêtrement d'horaires : je m'explique ->

    Sois les horaires suivantes:
    HoraireDebut - HoraireFin
    1- 09h50 - 10h30
    2- 10h50 - 12h10
    3- 14h25 - 16h20
    4- 11h15 - 17h15

    Lecture des lignes:
    1ère ligne: Ok
    2ème ligne: Ok
    3ème ligne: Ok
    4ème ligne: Ah, je vois qu'une partie des horaires de la ligne 4 (11h15 - 17h15) sont déjà présentes dans la ligne 2 et 3 ( car 11h15 est compris entre 10h50 et 12h10, et que la plage 14h25- 16h20 est comprise dans la plage 11h15 - 17h15)
    A ce moment, il faut que je récupère la positions des horaires erronées soit la position (dans le tableau) des horaires (10h50 - 12h10 / 14h25 - 16h20 / 11h15 - 17h15).

    En fait, dès que j'ai un conflit dans une de mes périodes.

    J'ai pensé à un tableau imbriqué dans un autre, comme ceci, mais j'ai des doutes sur son fonctionnement, et encore plus sur sa performance!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tabErreurs=[]	
     
    for(var r=0;r<tabDate.length;r=r+2){
    	for(var k=0;k<tabDate.length;k=k+2){
    		if(r!=k){	
     
    			if((tabDate[k]<tabDate[r+1] && tabDate[r+1]<tabDate[k+1]) || (tabDate[k]<tabDate[r] && tabDate[r]<tabDate[k+1])){ 
    					tabErreurs.push(k)
    						tabErreurs.push(r)								
    			}				
    		}			
    	}	
    }
    Je vous remercie pour toute l'aide que vous pourrez m'apporter!

  2. #2
    Membre expérimenté Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Moi j'aime bien travailler sur des structures de données compréhensibles, qui me permettent d'avoir des algos plus compréhensibles aussi du coup.
    Si dans ton tableau d'horaires, tu avais des objets contenant une date de début et une date de fin (au lieu de simples chaines de caractères), déjà l'algo serait plus simple. Après on pourrait imaginer créer une fonction qui prend deux objets de ce type et qui retourne un booléen indiquant s'il y a chevauchement.
    Enfin tu peux améliorer ton algorithme en réalisant que, si tu dois effectivement parcourir tous les horaires au moins une fois (ta boucle extérieure), tu n'as besoin de parcourir pour un horaire donné que les horaires qui le suivent dans le tableau, car si horaire1 chevauche horaire2, alors horaire2 chevauche horaire1.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    J'avoue que je n'ai jamais penser (donc fait) de l'objet en javascript, donc je préfère le mettre en parenthèse pour le moment.

    Pour la seconde, en fait je ne vois comment je vais pouvoir récupérer toutes les valeurs. Je sais que dans ma "solution" je récupère plusieurs fois la même, mais là j'aimerais bien avoir quelques pistes.

  4. #4
    Membre expérimenté Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Bon je remballe mes objets alors...

    Pour ne pas avoir de doublon dans tes résultats, tu peux apporter cette petite modif à ton algo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var r=0;r<tabDate.length;r=r+2){
    	for(var k=0;k<tabDate.length;k=k+2){
    		if(r!=k){
    devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(var r=0;r<tabDate.length;r=r+2){
    	for(var k=r+2;k<tabDate.length;k=k+2){

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    En effet, j'ai le résultat escompté.

    Merci pour ton aide!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    Aie, finalement j'ai un autre soucis, mais dans ma condition.

    Il n'y a pas d'erreur relevée lorsqu'un couple date début/date fin est compris dans un autre.

    Par exemple quand je choisis 10h10 - 20h20 et 11h00 - 19h00, il n'y a pas d'erreur.

    J'ai testé plusieurs conditions pour le moment, mais sans succès.

  7. #7
    Membre expérimenté Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    D'une manière générale, quand tu veux savoir si des intervalles de temps de type [début,fin] se chevauchent, la règle est la suivante:
    Pour qu'il y ait chevauchement entre [d1,f1] et [d2,f2], il faut que d2<=f1 ET d1<=f2.
    Ce qui veut dire, dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabDate[k]<=tabDate[r+1] && tabDate[r]<tabDate[k+1]
    J'espère que je ne me trompe pas, il faut que je la retrouve à chaque fois

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    Merci pour ton aide, çà fonctionne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HaXe] Collision entre éléments dans un même tableau
    Par bvenu dans le forum Flash
    Réponses: 0
    Dernier message: 12/03/2015, 10h50
  2. Réponses: 4
    Dernier message: 06/10/2009, 10h44
  3. [SQL] affichage de tables différentes dans un même tableau
    Par brindherbe86 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/03/2008, 12h33
  4. Plusieurs dimensions dans un même tableau
    Par pgentils dans le forum Deski
    Réponses: 18
    Dernier message: 20/11/2007, 15h28
  5. [MySQL] affichage de données de plusieurs tables dans un même tableau ?
    Par undebutant dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/03/2007, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo