0

Einen Wert in einem Objekt ändern

Ausgangslage:

let object := {

 Level1: {
   TestKey: "Testvalue1",
   Level2: {
     TestKey: "Testvalue2",
     Level3: {
       TestKey: "Testvalue3"
     }
   }
  }
};
object.(Level1 := {
  TestKey: "newValue"
});
alert(object.Level1.TestKey)

 

Wie kann ich nun einen Wert innerhalb dieses Objektes ändern ohne das Objekt komplett neu aufzubauen?

3 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Etienne,

    so direkt sehe ich keine Möglichkeiten. Als workaround;

    ---

    let valuesArray:=["Testvalue1","Testvalue2","Testvalue3"];

    let object := {

     Level1: {
       TestKey:item(valuesArray,0)
       Level2: {
         TestKey: item(valuesArray,1),
         Level3: {
           TestKey: item(valuesArray,2)
         }
       }
      }
    };

    ******

    valuesArray:=for i in range(cnt(valuesArray)) do
    if i=0 then newValue else item(valuesArray,i) end;

    ---

     

    Leo

    • m2apla gmbh
    • Etienne_Scherrer
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die Antwort. Denke aber nicht das ich den Workaround so bei mir anwenden kann, da ich ein mir unbekanntes Objekt verändern möchte, sprich eine API-Response und diese dann direkt wieder weiterverswenden wollte.

    In meiner Anwendung mache ich einen Request auf eine API und hole mir einen Datensatz, den ich mit Daten aus dem Ninox verestzt wieder zurücksenden will.
    Die zu verändernden Daten befinden sich immer im gleichen Key:

    let getResult := do as server
         http("GET", apiUrl + "endpoint/" + dataId, header, body)
    end;

    getResult.result.Key := "Neuer Datenwert";

    let putResult := do as server
         http("PUT", apiUrl + "endpoint/" + dataId, header, getResult.result)
    end;

    • m2apla gmbh
    • Etienne_Scherrer
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Aber ich habe bis jetzt eben noch keinen Weg gefunden einen spezifischen Wert direkt zu bearbeiten:

    getResult.result.Key := "Neuer Datenwert"; funktioniert also nicht