2017-06-27 1 views
0

Hier sind die Objekte. Das TypeModel-Objekt und das StatusModel-Objekt haben eine Eigenschaft typeID, die eine Nummer (beispielsweise 1) sein muss.Das Ändern einer Objekteigenschaft in einem Array von Objekten ändert alle Objekteigenschaften (TypeScript)

export class TypeModel{ 
     typeID: number; 
     typeDescription: string; 
    } 


    export class StatusModel{ 
     typeId: number; 
     statusId: number; 
     typeStatusDescr: string; 
    } 

    export class TypeStatusesModel{ 
     type: TypeModel; 
     status: StatusModel; 
    } 


let typeStatuses: TypeStatusesModel[] = []; 
let typeStatusFirst: TypeStatusesModel= new TypeStatusesModel(); 
typeStatusFirst = { 
    type: { 
    typeID:1, 
    typeDescription: "Description Type 1" 
    }, 
    status: { 
    typeId: 1, 
    statusId: 1, 
    typeStatusDescr: "Description Status 1" 
    } 
} 
typeStatuses.push(typeStatusFirst); 

let typeStatusSecond: TypeStatusesModel= new TypeStatusesModel(); 
typeStatusSecond= { 
    type: { 
    typeID:2, 
    typeDescription: "Description Type 2" 
    }, 
    status: { 
    typeId: 1; 
    statusId: 2; 
    typeStatusDescr: "Description Status 2"; 
    } 
} 
typeStatuses.push(typeStatusSecond); 

Das Problem ist, wenn ich versuche, typeID des zweiten Objekts in typeStatuses Array die Eigenschaft zu ändern 2 nummerieren, die die gleiche Eigenschaft (typeID) in meinem ersten Objekt ändern. Ich versuche, ein temporäres Objekt zu erstellen und das "defekte" zu ersetzen, aber nichts. (let tempObject = Object.create(typeStatuses[1]))

+1

Das ist ziemlich unwahrscheinlich. Können Sie uns den Code zeigen, den Sie verwenden, um die Eigenschaft zu ändern? Außerdem erstellen Sie eine Klasse und erstellen dann nur ein anonymes Objekt. Statt einer Klasse möchten Sie wahrscheinlich stattdessen eine Schnittstelle verwenden. – Rob

+0

Sie haben ein falsches Semikolon in diesem Code. Typ 1; ... sollte Typ sein: 1, ... – kimy82

Antwort

0

Sie haben ein falsches Semikolon, das nur Koma sein sollte. Ich würde auch diese Klassen für nur Schnittstellen ändern, da sie nur die Eigenschaften ohne jegliches Verhalten deklarieren.

export class TypeModel{ 
     typeID: number; 
     typeDescription: string; 
    } 


    export class StatusModel{ 
     typeId: number; 
     statusId: number; 
     typeStatusDescr: string; 
    } 

    export class TypeStatusesModel{ 
     type: TypeModel; 
     status: StatusModel; 
    } 


let typeStatuses: TypeStatusesModel[] = []; 
let typeStatusFirst: TypeStatusesModel= new TypeStatusesModel(); 
typeStatusFirst = { 
    type: { 
    typeID:1, 
    typeDescription: "Description Type 1" 
    }, 
    status: { 
    typeId: 1, 
    statusId: 1, 
    typeStatusDescr: "Description Status 1" 
    } 
} 
typeStatuses.push(typeStatusFirst); 

let typeStatusSecond: TypeStatusesModel= new TypeStatusesModel(); 
typeStatusSecond= { 
    type: { 
    typeID:2, 
    typeDescription: "Description Type 2" 
    }, 
    status: { 
    typeId: 1, 
    statusId: 2, 
    typeStatusDescr: "Description Status 2", 
    } 
} 
typeStatuses.push(typeStatusSecond); 
typeStatuses[0].type.typeID=234; 
console.log(JSON.stringify(typeStatuses)); 

es funktioniert mit einem Konsolenprotokoll

[{ "Typ": { "typeID": 234, "Typbeschreibung": "Beschreibung Typ 1"}, "Status": { "typeId": 1, "statusId": 1, "typeStatusDescr": "Beschreibung Status 1"}}, {"type": {"typeID": 2, "typeDescription": "Beschreibung Typ 2"}, " Status ": {" TypeId ": 1," StatusID ": 2," -Typen tatusDescr ":" Beschreibung Status 2" }}]

Also sollte der Code sowas sein. Ich habe auch den Export entfernt, da ich nicht sehen kann, dass Sie die Schnittstellen außerhalb verwenden.

interface TypeModel{ 
     typeID: number; 
     typeDescription: string; 
    } 


    interface StatusModel{ 
     typeId: number; 
     statusId: number; 
     typeStatusDescr: string; 
    } 

    interface TypeStatusesModel{ 
     type: TypeModel; 
     status: StatusModel; 
    } 


let typeStatuses: TypeStatusesModel[] = []; 
let typeStatusFirst: TypeStatusesModel; 
typeStatusFirst = { 
    type: { 
    typeID:1, 
    typeDescription: "Description Type 1" 
    }, 
    status: { 
    typeId: 1, 
    statusId: 1, 
    typeStatusDescr: "Description Status 1" 
    } 
} 
typeStatuses.push(typeStatusFirst); 

let typeStatusSecond: TypeStatusesModel; 
typeStatusSecond= { 
    type: { 
    typeID:2, 
    typeDescription: "Description Type 2" 
    }, 
    status: { 
    typeId: 1, 
    statusId: 2, 
    typeStatusDescr: "Description Status 2", 
    } 
} 
typeStatuses.push(typeStatusSecond); 
typeStatuses[0].type.typeID=234; 
console.log(JSON.stringify(typeStatuses)); 
+0

Sorry für diesen Fehler, denn das ist nicht der eigentliche Code und ich schreibe das Beispiel hier. – VSmolyanski

+1

@VSmolyanski Bitte testen Sie die Beispiele, bevor Sie es hier veröffentlichen. Es macht es * sehr * schwierig, Ihr Problem zu diagnostizieren (vor allem, weil Sie behaupten, dass es sich extrem unwahrscheinlich verhält). Ihr Beitrag enthält auch nach der Bearbeitung immer noch ungültige Semikolons. Bitte testen Sie Ihr Snippet, beheben Sie es und bearbeiten Sie ein funktionierendes und reproduzierbares Beispiel in Ihrem Post. – Rob

Verwandte Themen