2016-07-18 8 views
1

Ich möchte Objekt Literalliste von JSON-Datei in bestimmte Klassenobjektliste in Javascript zu konvertieren, ich versuchte, aber nicht in der Lage zu erreichen, kann jemand weiß, wie dies in ES5/ES6 zu erreichen da dies in Winkel 2 im Versuch:Konvertieren literal Objekt zu bestimmten Klasse 'Objekt in Javascript

Hier ist meine JSON-Datei:

{"list":[ 
    {"name":"ABC", "cost":200}, 
    {"name":"LMN", "cost":100}, 
    {"name":"POP", "cost":200}, 
    {"name":"OEE", "cost":560}, 
    {"name":"WWO", "cost":450}, 
    {"name":"ERR", "cost":150}, 
    {"name":"OWE", "cost":250} 
]} 

Produktklasse:

export class Product{ 
static newId:number = 0; 

constructor(public name: string = "", public cost: number = 0,public id: number = 0){ 
    this.id = ++Product.newId; 
}}; 

Hier „Liste“ Array enthält eine Liste von Objektliterale vom Typ Objekt, ich möchte nur alle von ihnen in das Objekt vom Typ „Porduct“ Tring

Hier ist das, was im umwandeln zu tun :

this.appService.getProductList().subscribe(
    data => this.productList = data.list, 
    error => console.error("error"), 
    () => console.log("GET done.") 
); 

Hier "appService" ist HTTP-Dienst, "getProductList()" ist Service Methode liefert beobachtbar und "this.productList" ist ein Array, ich möchte dieses Array mit Objekt vom Typ füllen Produkt eher einfach "Objekt". Bitte hilf mir dabei.

Antwort

2

ich das denke, was Sie wollen:

this.appService.getProductList().subscribe(
    data => this.productList = data.list.map(item => new Product(item.name, item.cost)); 
    error => console.error("error"), 
    () => console.log("GET done.") 
); 
+0

danke, ich schätze deine Antwort :) – Shree

3

In Ihrem getProductList() in dem .map Anruf verwandelt es nur zu einem "echten" Produkt:

return this.http.get(...) 
      .map(res => res.json().map(p => new Product(p.name, p.cost))); 

Ich würde es nicht tun, in die subscribe weil ich als Verbraucher der getProductList() annehmen würde, tatsächlich Produkte und nicht nur JS-Objekte zu bekommen. Der Kunde muss nichts über das Implementierungsdetail wissen.

+1

wirklich danke, das ist so einfach, aber mir unbekannt. – Shree

+0

Danke für diese Antwort, ich habe einen Zweifel, in diesem Beispiel verwende ich andere eckige Komponente in dieser Verwendung wie folgt: privates Modell: Produkt = neues Produkt(); aber ich bin nicht in der Lage, die aktuelle Produkt-ID zu erhalten, da es nicht asyc ist, was würde ich tun, um die aktuelle Produkt-ID zu erhalten. – Shree

+0

Ich verstehe diese Frage nicht wirklich. Was versuchst du zu erreichen? – rinukkusu

0
this.appService.getProductList().subscribe(
    data => this.productList = data.list.map((listItem) => new Product(listItem), 
    error => console.error("error"), 
    () => console.log("GET done.") 
); 
+0

@ Günter Zöchbauer, danke, ich habe deine Wiederholung sehr geschätzt – Shree

Verwandte Themen