2017-07-14 3 views
1

forループを使用して項目を配列にプッシュしようとしていて、塗りつぶした配列を使用したかったのです。 'push'または 'concat'が正常に実行されます。しかし、問題は、2つの項目がループしているときです。ループの最初の項目と連結するのではなく、2回目のループ実行時に2回目の配列を2回押します。ノードJSでpushまたはconcatを使用しているときに、同じ項目が複数回配列に追加されました

var response_items = {}; 
var basketItems = []; 

for (var i = 0; i < basketRequest.items.length; i++) { 

      basket_item_code = basketRequest.items[i].item_code; 
      response_items.item_code = basket_item_code; 
      basket_item_price = basketRequest.items[i].price; 
      response_items.price = basket_item_price; 
      basket_item_qty = basketRequest.items[i].qty; 
      response_items.qty = basket_item_qty; 
      item_sub_total = basket_item_price * basket_item_qty; 
      sub_total = sub_total + item_sub_total; 
      response_items.fee = '800'; 
      basketItems.push(response_items); 
      //basketItems= basketItems.concat(response_items); 
      console.log (i,'basketItems concatetw ...', basketItems); 
     } 

電流入力

"items":[{ 
      "item_code": "234234", 
      "price": "908", 
      "qty": "5" 
     }, 
     { 
      "item_code": "787878777", 
      "price": "1008", 
      "qty": "5" 
     }] 

現在のO/P:

"items": [ 
     { 
      "item_code": "787878777", 
      "price": "1008", 
      "qty": "5", 
      "fee": "800" 
     }, 
     { 
      "item_code": "787878777", 
      "price": "1008", 
      "qty": "5", 
      "fee": "800" 
     } 
    ] 

理想のO/P:

"items":[{ 
      "item_code": "234234", 
      "price": "908", 
      "qty": "5" 
     }, 
     { 
      "item_code": "787878777", 
      "price": "1008", 
      "qty": "5" 
     }] 
+2

put var response_items = {};ループに入れる –

+0

ジョナスWが大失敗を指摘してくれてありがとう!プレースメントvar response_items = {};ループに入り、問題を解決しました。 – user2418542

答えて

0

同じオブジェクトを複数回配列に配置しています。しかし、あなたのコードは本当に読みにくいです。私はそれを行うだろうか厥:あなたは数(+)にsub_totalを変換するために、それはあなたの入力に現れdoes notの必要

var basket_items = basketRequest.items.map(basket=>({ 
     item_code:basket.item_code, 
     price:basket.price, 
     qty:basket.qty, 
     sub_total:(+basket.sub_total ||0) + basket.price * basket.qty, 
     fee:'800' 
})); 

注意。

http://jsbin.com/pudapujaca/edit?console

0

は今、あなたは同じオブジェクト参照を入れていますオブジェクトのデータを変更します。だから両方の場所で変わる。ループ内にresponse_itemsオブジェクト宣言を入れて、新しいオブジェクトが作成され、繰り返しごとに配列に追加されるようにする必要があります。

関連する問題