web-dev-qa-db-fra.com

Typescript: existe-t-il un moyen simple de convertir un tableau d'objets d'un type à un autre

Donc, j'ai deux cours

Item { name: string; desc: string; meta: string}

ViewItem { name: string; desc: string; hidden: boolean; }

J'ai un tableau de Item qui doit être converti en un tableau de ViewItem . Actuellement, je boucle en boucle dans le tableau en utilisant pour, instanciant ViewItem, attribuant des valeurs à des attributs et en le poussant vers le second tableau.

Existe-t-il un moyen simple d'y parvenir en utilisant les expressions lambda? (similaire à C #) Ou existe-t-il un autre moyen?

15
Shilpa Nagavara

Vous n'avez pas montré assez de votre code, je ne sais donc pas comment vous instancier vos classes, mais dans tous les cas, vous pouvez utiliser la fonction array map :

class Item {
    name: string;
    desc: string;
    meta: string
}

class ViewItem {
    name: string;
    desc: string;
    hidden: boolean;

    constructor(item: Item) {
        this.name = item.name;
        this.desc = item.desc;
        this.hidden = false;
    }
}

let arr1: Item[];
let arr2 = arr1.map(item => new ViewItem(item));

( code dans la cour de récréation )


Modifier

Cela peut être plus court avec Object.assign:

constructor(item: Item) {
    Object.assign(this, item);
}
20
Nitzan Tomer

Une autre méthode consiste à utiliser Object.keys,

class Item {
    name: string;
    desc: string;
    meta: string
}

class ViewItem {
    name: string;
    desc: string;
    hidden: boolean;

    // additional properties
    additionalProp: boolean;

    constructor(item: Item) {
        Object.keys(item).forEach((prop) => { this[prop] = item[prop]; });

        // additional properties specific to this class
        this.additionalProp = false;
    }
}

Usage:

let arr1: Item[] = [
    {
        name: "John Doe",
        desc: "blah",
        meta: "blah blah"
    }
];
let arr2: ViewItem[] = arr1.map(item => new ViewItem(item));

Lien de terrain de jeu

1
cyberpirate92