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

TypeScript Discussion :

Methode Lamba sur un type Array


Sujet :

TypeScript

  1. #1
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut Methode Lamba sur un type Array
    Bonjour,

    Je recherches à ajouter une méthode distinct à la Class Array.
    Jusqu'à maintenant, je m'y prenais comme cela.

    Code TypeScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    interface Array<T> {
        distinct(): T[];
    }
     
    Array.prototype.distinct = function(): number[]{
        return [... new Set(this)];
    }

    Car je n'avais besoin de cette méthode que sur les Array<number>

    Seulement, maintenant j'aurais besoin de rendre cette méthode plus général.
    Je souhaiterais donc pouvoir donner un lambda qui dirait sur quoi comparer les objets.
    ex.
    (objArray: Array<Person>).distinct(e => e.id): Array<Person>
    (objArray: Array<Person>).distinct(e => e.name): Array<Person>

    Merci d'avance

  2. #2
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    J'ai fini par trouver une solution, la voici.

    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
    interface Array<T> {
        distinct(keySelector?: (item: T) => any): T[];
    }
    
    
    Array.prototype.distinct = function<T>(this: T[], keySelector?: (item: T) => any): T[] {
        const uniqueSet = new Set();
        return this.filter(obj => {
            const key = keySelector ? keySelector(obj) : JSON.stringify(obj);
            const isUnique = !uniqueSet.has(key);
            if (isUnique) {
                uniqueSet.add(key);
            }
            return isUnique;
        });
    }


    Elle peut probablement encore être amélioré mais voici déjà un bon prototype

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

Discussions similaires

  1. [perl6] No such method 'made' for invocant of type 'Array
    Par jeepc dans le forum Langage
    Réponses: 5
    Dernier message: 08/01/2017, 02h13
  2. Simuler generique en AS3 ou restreindre Array sur seul Type
    Par julien.63 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 20/11/2009, 15h18
  3. informations sur le type interval dans interbase
    Par devalender dans le forum InterBase
    Réponses: 6
    Dernier message: 03/06/2004, 10h29
  4. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55
  5. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59

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