2017-08-31 4 views
0

Ich versuche, die Coupons von einem Client, der in einer API vorhanden sind, zu zeigen. Wenn ein Coupon (oder ein "n") in einem anderen api vorhanden ist, der die verwendeten Coupons zählt, muss ich den oder die Coupons aus der Liste löschen. Die api der verwendeten Coupons response etwas wie folgt aus:Verwenden Sie Spleiß und für oder forEach

{ 
"State": 200, 
"Response": [ 
    { 
     "IdInvoiceRequest": 104, 
     "Coupons": [ 
      { 
       "IdCoupon": 77236, 
       "Code": "11#E5ZQHZ-GNH" 
      }, 
      { 
       "IdCoupon": 77237, 
       "Code": "12#WM96FY-NGE" 
      }, 
      { 
       "IdCoupon": 77239, 
       "Code": "14#BH92BA-E6N" 
      }, 
      { 
       "IdCoupon": 77240, 
       "Code": "15#FWXNR4-XHP" 
      }, 
      { 
       "IdCoupon": 77241, 
       "Code": "16#7FK5F8-TKM" 
      } 
     ] 
    }, 
    { 
     "IdInvoiceRequest": 143, 
     "Coupons": [ 
      { 
       "IdCoupon": 77238, 
       "Code": "13#BN5MZB-VJ9" 
      } 
     ] 
    } 
], 
"Message": "Informacion correcta", 
"TotalRows": 0, 
"IsCorrect": true} 

Das Problem kommt, wenn ich versuche, die verwendeten Coupons zu beseitigen. Mein Code so weit:

function validExist() { 
    vm.getSelected = 
    couponExist.get({ 
     idOrder: vm.idOrder 
    }).$promise.then(function(data) { 

     for (var i = 0; i < data.Response.length; i++) { 

     data.Response[i].Select = vm.exist; 
     console.log(vm.exist); 
     } 

     vm.otherF = vm.coupons 

     for (var i = 0; i < data.Response.length; i++) { 

     data.Response[i].Select = vm.isHere; 
     console.log(vm.isHere); 
     } 

     if (vm.exist == vm.isHere) { 
     vm.coupons.splice(vm.coupons.IdCoupon, i++); 
     }; 

    }); 
} 

Wenn Spleiß wirkt, beseitigen nur die erste Coupon, aber die anderen immer noch die gleichen, auch wenn alle Coupons innerhalb der verwendeten Gutschein Liste enthalten sind. Was kann ich tun, um alle Coupons zu löschen? Ich habe gehört, dass ein Weg, dies zu tun, 'forEach' oder ein paar 'for' verwendet, aber ich sehe kein Licht (seufzt).

Können Sie mir helfen?

Vielen Dank im Voraus.

Antwort

0

Array.prototype.splice Nimmt einen Startindex und die Anzahl der Elemente, die aus dem Array entfernt werden sollen. Ich bin nicht sicher, was die anderen Teile des Codes sein sollen tun, aber hier ist ein Beispiel dafür, wie Sie Elemente von einem Array aussehen würden, und entfernen Sie sie von einem zweiten Array:

var existingCoupons = [ 
 
    { IdCoupon: 111 }, 
 
    { IdCoupon: 222 }, 
 
    { IdCoupon: 333 }, 
 
    { IdCoupon: 444 }, 
 
    { IdCoupon: 555 } 
 
]; 
 
var simulatedResponse = [{ 
 
    IdInvoiceRequest: "abc", 
 
    Coupons: [ 
 
    { IdCoupon: 222 }, 
 
    { IdCoupon: 444 } 
 
    ] 
 
},{ 
 
    IdInvoiceRequest: "def", 
 
    Coupons: [ 
 
    { IdCoupon: 555 } 
 
    ] 
 
}]; 
 

 
//Loop through the invoices in the response 
 
for(var i=0; i<simulatedResponse.length; i++){ 
 
    //Loop through the coupons in the invoice 
 
    for(var j=0; j<simulatedResponse[i].Coupons.length; j++){ 
 
    //Loop through the existing coupons 
 
    for(var k=0; k<existingCoupons.length; k++){ 
 
     //If the unique identifier matches... 
 
     if(existingCoupons[k].IdCoupon == simulatedResponse[i].Coupons[j].IdCoupon){ 
 
     //Splice one existing coupon out of the array at the current index 
 
     existingCoupons.splice(k, 1); 
 
     break; 
 
     } 
 
    } 
 
    } 
 
} 
 

 
console.log(existingCoupons)

+0

Es funktioniert! Aber, wenn Sie das Beispiel der API sehen, haben Sie zwei "IdInvoiceRequest". Momentan iteriert dieser Teil des Codes über den ersten IdInvoiceRequest. Wie kann ich über alle IdInvoiceRequest iterieren? –

+0

Ich habe meine Antwort aktualisiert. Im Grunde brauchen Sie nur eine andere Schleife außerhalb der zwei Coupon-Schleifen, die über die Rechnungen in Ihrer Antwort iterieren. –

+0

Ich schulde dir ein Bier! Es funktioniert perfekt !!! –

0

Lassen Sie uns der konzeptionellen Definition des Problems, das Sie lösen möchten, etwas Klarheit geben und dann die eigentliche programmatische Implementierung auswählen.

Es scheint, Sie haben 2 Listen und das Ziel ist es, alle Einträge aus den ersten Listen zu löschen, die in einer zweiten Liste existiert. Eine mögliche und recht einfache Lösung für dieses Problem wäre das Erstellen einer dritten leeren Liste und dann die Verwendung von 2 for iterativen Schleifen (eine äußere für die erste Liste und innere für die zweite) dynamisch nur Einträge aus der ersten Liste hinzufügen, die nicht existiert in der zweiten. Zusätzlich zu der offensichtlichen Einfachheit wird dieser Ansatz auch eine nahezu optimale Rechenleistung liefern.

Hoffe, das kann helfen.