2017-08-31 2 views
0

私は1つのAPIに存在するクライアントからクーポンを表示しようとしています。使用されたクーポンを数えている別のAPIの中に1つ(または 'n')のクーポンが存在する場合は、そのクーポンまたはそのクーポンをリストから削除する必要があります。使用されたクーポンのAPIは次のように応答します。スプライスとforまたは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} 

使用したクーポンを削除しようとすると問題が発生します。私のコードは、これまで:すべてのクーポンが使用クーポンリストの内側にある場合でも、

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++); 
     }; 

    }); 
} 

ときスプライス行為は、非常に最初のクーポンを排除し、他の人も同じ。すべてのクーポンを削除するにはどうすればよいですか?私はこれを行う方法は 'forEach'を使用していることを聞いたことがあるが、私は光を見ない(一息)。

私を助けることができますか?

Thanx事前に。

答えて

0

Array.prototype.spliceは、開始インデックスと削除するアイテムの数を配列からとります。私はあなたのコードの他の部分をやっていることになっているかわからないんだけど、ここであなたは1つの配列からアイテムを探して、二番目の配列からそれらを削除したいかの例です:

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

これは機能します!しかし、APIの例を見ると、2つの "IdInvoiceRequest"があります。今、コードのこの部分が最初のIdInvoiceRequestを反復処理します。どのようにすべてのIdInvoiceRequestを反復処理できますか? –

+0

答えを更新しました。基本的には、2つのクーポンループの外に別のループが必要です。これは、応答の請求書を繰り返し処理します。 –

+0

私はあなたにビールを借りています!それは完璧に動作します! –

0

解決しようとしている問題の概念定義を明確にしてから、実際のプログラム実装を選択してみましょう。

2つのリストがあり、2番目のリストにある最初のリストからすべてのエントリを削除することが目標です。この問題を解決するには、3つ目の空のリストを作成してから、2つ目のリストの外側と2番目のリストの内側の反復ループを使用して、存在しない最初のリストのエントリだけを動的に追加します2番目に明白な単純さに加えて、このアプローチはまた、ほぼ最適な計算性能を提供する。

これが役に立ちます。

関連する問題