Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 10h39   #1
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Par défaut Tri de données

Bonjour à tous,

J'ai dans une page PHP un tableau dans lequel figure des données de temps (par exemple: 10min, 4jour, 2heures).

Actuellement mon tri s'effectue en JS mais me donne des résultats illogiques :

Citation:
10min>4jours>2heures
Savez-vous comment effectuez un tri pour que la fonction prenne en compte également la partie min/jour/heure ?

Merci d'avance !

TipX
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 22h10   #2
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
Bonsoir,
le résultat du tri n'a rien d'illogique attendu qu'il s'agit de trier des chaines de caractère.
- Comment effectues tu le tri actuellement ?
- Comment se présente tes données, toujours du même style ?
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 09h13   #3
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Hello,

Oui tu as raison le tri n'est pas illogique il ne correspond juste pas à ce que j'attend.

Mes données se présente toujours de la même façon (xx days, hours ou min).

Actuellement j'utlise un petit script récupéré sur une autre appli mais qui n'effectue un tri que sur les chiffres.
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 09h20   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 040
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 040
Points : 45 141
Points : 45 141
a toi de faire une fonction qui retourne le bon tri ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function timeSort(a, b)
{
a =1*a.substr(0,2)
b=1*b.substr(0,2)
   if(a > b)
      return 1
   if(a < b)
      return -1
   return 0
} 
 
tonArray.sort(timeSort)
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h13   #5
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
Citation:
Savez-vous comment effectuez un tri pour que la fonction prenne en compte également la partie min/jour/heure ?
il te faut d'abord décomposer la partie gauche, les chiffres, de la droite les lettres.
Une petite expression régulière peut être , et ensuite faire le tri sur les deux parties.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 09h21   #6
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Oui j'avais plus ou moins saisi la manière de procéder.

Je suis encore loin d'être à l'aide en php, je vais essayer de voir comment fonctionne ces expressions régulières, je reviens certainement vers vous bientôt!
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 09h24   #7
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 040
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 040
Points : 45 141
Points : 45 141
Code :
1
2
a =1*a.match(/^\d{1,2}/)
b=1*b.match(/^\d{1,2}/)
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 10h10   #8
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Pourrais tu un peu expliquer ton code SpaceFrog?

Le "d" sert à tester la présence du mot "days" je suppose ? Quand est-t'il du "{1,2}" derrière ?

Je dois avoir donc mon cas ?
a=1*a.match(/^\d{1,2}/)
b=1*b.match(/^\h{1,2}/)
c=1*b.match(/^\m{1,2}/)

Comment m'en servir par la suite ?...

J'ai commencer à regarder de mon côté et je parvenais à tester la présence d'un mot dans ma var. Je pensais donc ensuite trier les minutes en premier, les placer dans mon tableau, puis les hours etc...
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 10h11   #9
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 040
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 040
Points : 45 141
Points : 45 141
pas du tout
^début de chaine
\d = caractère numérique
{1,2} = une ou deux fois

pour ce qui est est du comment t'en servir par la suite ... je pense quze tu as zappé mon premier post ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 13h59   #10
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 779
Points : 4 779
si il te faut une méthode pour également trier suivant les critères days, hours, mn, la solution proposé par SpaceFrog n'est pas suffisante , elle n'opére qu'un tri sur les nombres.

Je te mets une approche en utilisant une clé de tri générée par les données
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
// tableau donnees resultats
var data = [];
// les multiplicateurs
var multi = {
  'days'  : 60*24,
  'hours' : 60,
  'mn'    : 1
};
// chaine de test
var chaine = '2hours,10mn,4days,15mn,13days,4hours';
// insertion d'une virgule entre le nombre et l'unite
chaine = chaine.replace(/([d||h||m])/g, ",$1");
// recup sous forme tableau
var tab = chaine.split(',');
// c'est parti
var i, k, nb;
for( i = k = 0, nb = tab.length; i < nb; k++){
  data[k] = {};
  data[k].valeur = tab[i++];
  data[k].unite  = tab[i++];
  // calcul cle de tri en minute suivant unite
  data[k].time = data[k].valeur * multi[data[k].unite];
}
// tri du tableau ordre croissant
data.sort( function( a, b){
  if( a.time > b.time) return 1;
  if( a.time < b.time) return -1;
  return 0;
});
// affichage pour voir
for( i in data){
  document.write( data[i].valeur, data[i].unite, '-> clé de tri = ', data[i].time , '<br>');
}
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h30   #11
Invité de passage
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 0
Points : 0
Merci je n'ai pas eu le temps de travailler la dessus, mais je regarde ça demain ,)
Fingertip est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h47.


 
 
 
 
Partenaires

Hébergement Web