DIVERSES FONCTIONS SIMPLES POUR LES TABLEAUX

LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 3 juin 2005 à 18:46
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014 - 6 déc. 2007 à 10:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31809-diverses-fonctions-simples-pour-les-tableaux

pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
6 déc. 2007 à 10:50
J'avoue que la sémantique me laisse perplexe... si j'en avais besoin je le ferais volontier, mais la, juste pour les beaux yeux de la sémantique, je te laisse volontier le bébé :)
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
5 déc. 2007 à 12:51
À la réflexion, tu as raison, en dehors de la fonction toString, je ne vois pas trop ce que l'on pourrais mettre dans une bibliothèque pour les objets... Peut-être une fonction de copie de propriétés depuis un autre Object (il me semble que la plupart des frameworks JavaScript font ça pour implémenter l'héritage) ?

Mais c'était surtout pour dire que la fonction que tu as proposée ne parcours pas les entrées d'un tableau mais les propriétés de l'objet, donc que sémentiquement je ne pouvais pas (voulais pas) la mettre dans ma bibliothèque.

Mais si ça ne t'intéresse pas de faire une bibliothèque Object, peut-être la ferais-je.
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
5 déc. 2007 à 09:52
Je ne vois pas trop l'utilité d'une bibliothèque Objet, je ne sais pas ce qu'on pourrait y ajouter? chaque objet est particulier, je ne vois pas trop ce que pourrait donner la propriété toString sur un objet d'ailleurs...
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
1 déc. 2007 à 18:43
Bon, j'ai un peu cherché et il semble que les tableaux associatifs n'existent pas : quand on utilise des propriétés nommées ce sont des propriétés associées à l'objet et non pas à Array (c.f. http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/, via http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:Array#Description).

Donc si on veut l'implémenter, il faudrait le faire comme prototype de Object, donc pas dans une bibliothèque pour les Array.

Sinon pour la petite histoire, la fonction toString() existe déjà, je ne fais que la surcharger pour rendre l'affichage plus joli et pour pouvoir faire un eval dessus.

En tous cas, merci pour ta participation : tu pourrais commencer une bibliothèque sur les Object. On pourra peut-être fusionner un jour nos deux bibliothèques qui sait. Même si je doute que l'on puisse concurencer les bibliothèques existantes comme JQuery ou Prototype.
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
30 nov. 2007 à 13:14
Comme je te le dis ;) testé sur FF2 et IE7 (j'ai pas cherché plus loin)
Pour la théorie, il me semble que le Array est lui même un objet et aussi que depuis une certaine version de JS on peut parcourir les propriétés/méthodes des objets comme on le fait des valeurs/clés d'un tableau -et vice versa-
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
30 nov. 2007 à 12:40
Salut, merci ton commentaire, mais moi je trouve que qu'il est mieux que ces fonctions ne soit pas natives : je suis plutôt partisan de langages très simple avec un minimum de fonctions prédéfinies car il y a tellement de besoins différents que quand on commence à incorporer de fonctions on ne s'arrête jamais. Je préfère que toutes ces fonctions soient rangées dans des bibliothèques séparées (du genre à la Python).

Quoi qu'il en soit, très bonne idée ta fonction, mais ça marche ? Parce qu'il me semblait que les tableaux associatifs n'étaient que des objets et pas des tableaux, cela signifierait qu'elle ne fonctionnerait pas avec le Array.prototype. Mais si ça marche je l'intègrerai dans la bibliothèque (la semaine prochaine probablement, j'ai plein de trucs à faire en ce moment).
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
30 nov. 2007 à 10:54
salut,
tout simplement énorme l'utilisation des prototypes, on se demande pourquoi ces fonctions sont pas natives dans JS! J'ai modifié la fonction toString pour prendre en compte les tableaux associatifs (avec les clés), pour avoir un résultat genre:
Array(7) {'0'=1, '1'=2, '2'=Array(4) {'0'=4, '1'=5, '2'=6, '3'=7}, '6'=33, 'x'="toto x", 'z'="toto yy", 'y'="toto zzz"}

voici le code pour cela, OK sur FF2 et IE7.: (utilise for (var i in this))
Array.prototype.toString = function ()
{
var buffer='', len=0;
for (var i in this)
{
if ((i instanceof String) || (typeof i == "string"))
buffer+=", '"+i+"'=";
else
buffer+=', '+i+'=';
if ((this[i] instanceof String) || (typeof this[i] == "string"))
buffer += '"' + this[i] + '"';
else if (isArray(this[i]))
buffer += this[i].toString();
else
buffer += this[i];
len++;
}
return "Array(" + len + ") {" + buffer.substring(2) + "}";
}

cado, ajoute le dans cette classe ;)
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
8 sept. 2007 à 17:23
Salut, désolé de ne pas avoir répondu plus tôt (j'ai eu plein de choses à faire récemment et je suis en plein déménagement). Alors en fait c'est très simple (si j'ai bien compris la problématique) : il faut effectivement utiliser la fonction de trie native de JavaScript (sort), mais il faut lui passer en argument une fonction de comparaison, sinon, les éléments seront convertis en chaînes et rangé selon l'ordre lexicographique (cf. http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Objets_globaux:Array:sort) :

function comparerMarque(fiche_1, fiche_2)
{
if (fiche_1[1] < fiche_2[1])
return -1;
else if (fiche_1[1] == fiche_2[1])
return 0;
else
return 1;
}

function comparerModele(fiche_1, fiche_2)
{
if (fiche_1[2] < fiche_2[2])
return -1;
else if (fiche_1[2] == fiche_2[2])
return 0;
else
return 1;
}

var fiches_triees_par_marques = fiches_array.sort(comparerMarque);
var fiches_triees_par_modeles = fiches_array.sort(comparerModele);

Voilà, c'est aussi simple que ça, il est inutile que j'intègre la fonction de trie dans la bibliothèque vu qu'elle existe déjà dans le standard JavaScript (à partir de 1.1).
Sinon, deux petites choses : la numérotations des éléments des tableaux en JavaScript commence à 0 et pas à 1 (tes fiches actuelles occupent 11 cases en mémoires pour 10 utilisées) et tu pourrais utiliser des objets au lieu des tableaux pour tes fiches, ce serait plus simple :
function Voiture(url_garage, marque, modele, categorie, couleur, kilometrage, interieur, millesime, immat, option, prix_ttc, photo)
{
this.url_garage = ;
this.marque = marque;
this.modele = modele;
this.categorie = categorie;
this.couleur = couleur;
this.kilometrage = kilometrage;
this.interieur = interieur;
this.millesime = millesime;
this.immat = immat;
this.option = option;
this.prix_ttc = prix_ttc;
this.photo = photo;
}
voiture_1 = new Voiture(....);

Cela permet de simplifier l'accès aux propriétés de la voiture (par les noms et non plus par des indexes numériques). Voir : http://developer.mozilla.org/fr/docs/R%C3%A9f%C3%A9rence_de_JavaScript_1.5_Core:Op%C3%A9rateurs:Op%C3%A9rateurs_sp%C3%A9ciaux:L%27op%C3%A9rateur_new

Bonne continuation.
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
8 août 2007 à 11:12
Salut, ben en fait, j'ai pas trop le temps de m'en occuper pour le moment, je suis actuellement en vacances et je n'ai que peu accès à internet mais je suis sûr que quelqu'un va se dévouer ;) .

Sinon, renseigne toi sur les algorithmes de tri comme le tri à bulles par exemple.

Promis, je l'intègrerai dans ma bibliothèque, d'ici deux semaines je pense.
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
7 août 2007 à 16:42
bjr, je trouve ton morceau de code très interressent (mais il manque la fonction que je recherche lol), (je sais que je ne suis pas sur le forum, mais peut être que tu saurais comment peut t'on procéder pour trier un tableau multidimensionnel (le mien n'a que 2 colonnes) par la deuxième colonne par exemple. car en fait j'ai une fonction qui insère récursivement au load des données
function add_array(url_garage,marque,modele,categorie,couleur,kilometrage,interieur,millesime,immat,option,prix_ttc,photo){
var id=fiches_array.length;
fiches_array[id]=new Array();
fiches_array[id][1]=marque;
fiches_array[id][2]=modele;
fiches_array[id][3]=categorie;
fiches_array[id][4]=kilometrage;
fiches_array[id][5]=couleur;
fiches_array[id][6]=interieur;
fiches_array[id][7]=option;
fiches_array[id][8]=prix_ttc;
fiches_array[id][9]=photo;
fiches_array[id][10]=immat;
}
et en fait je voudrais trier par marque ou bien par modele, j'ai essayé fiches_array.sort();, ca me trie par rapport à la 1ère colonne, mais je peux pas trier par rapport aux autres. merci bcp
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
21 avril 2007 à 16:30
Bon, je suis passé par là et j'ai un peu amélioré le code, autant les algorithmes que la propreté de l'écriture, comme ça, les débutants (et les cochons ;) ) pourront voir a quoi ressemble un code simple et propre.

Un truc très important quant-à l'optimisation du code c'est la propreté des boucles : mettre un minimum d'instruction continue, mais surtout break et return dans ses boucles est un bon moyen, préférez les tests dans la condition de la boucle (cf. la fonction compare()).

Voilà, bonne continuation à tous.
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
1 juin 2006 à 18:40
Mise à jour : optimisation du code.

J'appelle toujours à des idées de fonctions intéressantes.

De même pour une bibliothèque sur les chaînes que je viens de commencer.
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
5 juin 2005 à 21:06
Bon, ben puisque personne n'as d'idées, je vais m'inspirer des fonctions PHP.
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
4 juin 2005 à 17:23
Ah, ben autant pour moi, c'était un simple problème de cache dans mon navigateur...
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
4 juin 2005 à 17:21
Ca c'est sympa, 10/10, moi-même je crois que je n'aurait mis que 8, mdr, mais ce serait en core plus sympa si tu n'avais pas oublier de noter, lol...

Bon, à part mettre des notes, n'auriez vous pas d'autres idées de fonctions simples sur les tableaux ?!
cs_darkman2 Messages postés 121 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 31 décembre 2005
4 juin 2005 à 16:48
moi je te donne une nte de 10/10
ca se voit k s'est vraimen utile ton script
Gorrk Messages postés 96 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 26 avril 2007
4 juin 2005 à 14:44
9/10, Waou, je ne sais pas si ça le valait, mais en tous cas merci.

P.S. : oui, tu as raison, le mot néophyte est assez sympa, mais personnellement, dans un autre style bien sur, je prefère le mot archétype, mdr.
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
3 juin 2005 à 18:46
Salut,
Bon, ça va faire un peu péteux, mais j'avais déjà réalisé de tels ajout à la classe Array en Javascript. Donc c'est vraiment une bonne idée d'avoir poster une telle source sur le réseau. Le mot-clef "prototype" est très utile pour ajouter ses propres méthodes et peu connu de néophytes (ça le fait ce mot, non ?). Donc bravo ! 9/10 !
L.S.
++ !
Rejoignez-nous