2017-10-31 2 views
1

ich einen Kunden mit Äpfeln haben, ich habe eine Api Controller, die einen Object Customer als Parameter übernimmt und aktualisiert die bestehenden in der Datenbank mit diesen neuen Äpfel:Javascript - Array von Objekten an bestehenden Array von Objekten hinzufügen

[HttpPut("Update")] 
    public async void Put([FromBody]Customer customer) 
    { 
     await _repository.UpdateCustomer(customer); 
    } 

Mit Javascript möchte ich diese neuen Äpfel zu meinem aktuellen List von Äpfel im Kunden hinzufügen. Aus der Lektüre auf so sollte es in etwa so aussehen:

addApplesToCustomer_method: function() { 
     var updatedCustomer = this.currentCustomer; 
     Array.prototype.push.apply(updatedCustomer.apples, this.selectedApples); 

     $.ajax({ 
      url: 'api/customer/update', 
      type: 'PUT', 
      contentType: "application/json", 
      data: JSON.stringify({ 
       customer: updatedCustomer 
      }), 
      success: function() { 
       alert('success'); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert('Error: ' + textStatus + '\n' + errorThrown); 
      } 
     }); 
    } 

currentCustomer ist der Kunde wir aktualisieren möchten. selectedApples ist die neue List von Äpfel, die wir unseren bestehenden Array von Apples hinzufügen möchten.

Das oben genannte läuft jedoch nicht einmal, seit ich die Array.prototype.push.apply(updatedCustomer.apples, this.selectedApples) hinzugefügt habe, aber es gibt mir auch keinen Fehler. Es passiert einfach nichts. Wenn ich zurück gehe, um den Kunden und Äpfel separat zu meinem Controller zu senden, funktioniert es, aber ich will das nicht tun.

+0

Klingt wie Sie benötigen [Object.assign()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) – Beau

Antwort

2

Verwenden spread Syntax.

updatedCustomer.apples.push(...this.selectedApples); 

Spread-Syntax ermöglicht eine iterable wie ein Array Ausdruck oder String stellenweise erweitert werden, in denen null oder mehr Argumente (für die Funktion Anrufe) oder Elemente (Array Literale) zu erwarten sind, oder Objekt Der Ausdruck wird an Stellen erweitert, an denen null oder mehr Schlüssel/Wert-Paare (für Objektliterale) erwartet werden.

+0

was tun die Punkte vertreten? –

+0

Hier finden Sie viele Beispiele: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator –

+0

@Green_qaue, Verwenden Sie einfach eine 'condition':' if (arr = = null) updatedCustomer.apples = [] else updatedCustomer.apples.push (... this.selectedApples); ' –

0

Wie wäre es nur mit Array.push(object)

let objectArray = [] 

let apple = { 
    name: 'Apple', 
    size: 'medium' 
} 

let orange = { 
    name: 'Orange', 
    size: 'large' 
} 

// Create an initial list with apples 
for (var i = 0; i < 10; i++) { 
    objectArray.push(apple) 
} 

// Now add an orange to that list 
objectArray.push(orange) 

// The resulting array contains 10 apples, 1 orange. 
console.log(objectArray) 

Hier das Objekt auf das Array schieben ist der JSFiddle: http://jsfiddle.net/j7kcjjqh/

(die Konsole Überprüfen Sie das Ergebnis sehen)

Verwandte Themen