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?
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 )
Cela peut être plus court avec Object.assign
:
constructor(item: Item) {
Object.assign(this, item);
}
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));