2017-03-31 4 views
0

を使用して:地図を削減/合計を、私は、次のデータセットを変換しようとしていますUnderscorejs

var data = { 
"csrf": "token", 

"items": [ 
{"category": "product1", "image": "image1.jpg", "cost": "$6", "item_totals": [ 
    {"category": "discount", "amount": "-$1.0"}] 
}, 
{"category": "product2", "image": "image2.jpg", "cost": "$8", "item_totals": [ 
    {"category": "discount", "amount": "-$1.2"}] 
}], 

"totals": [ 
{"category": "shipping", "amount": "$0.00", "name": "Shipping", "is_zero": true}, 
{"category": "taxes", "amount": "$0.00", "name": "Taxes", "is_zero": true} 
], 
"total": "$1234", "subtotal": "$1234", "id": abc123, "currency_code": "USD"} 

を1つの値に、item_totals配列(複数可)内のすべての「量」の値の合計です。空の 'item_total'配列の 'items' &のレコードの量を変えながら、これを行うことはできません。どんな助けも素晴らしいだろう!

答えて

0

var data = { 
 
    "csrf": "token", 
 

 
    "items": [{ 
 
     "category": "product1", 
 
     "image": "image1.jpg", 
 
     "cost": "$6", 
 
     "item_totals": [{ 
 
     "category": "discount", 
 
     "amount": "-$1.0" 
 
     }] 
 
    }, 
 
    { 
 
     "category": "product2", 
 
     "image": "image2.jpg", 
 
     "cost": "$8", 
 
     "item_totals": [ // multiple item_totals 
 
     { 
 
      "category": "discount", 
 
      "amount": "-$1.2" 
 
     }, 
 
     { 
 
      "category": "discount", 
 
      "amount": "-$1.2" 
 
     } 
 
     ] 
 
    }, 
 
    { 
 
     "category": "product2", 
 
     "image": "image2.jpg", 
 
     "cost": "$8", 
 
     "item_totals": [] // empty item_totals 
 
    }, 
 
    { 
 
     "category": "product2", 
 
     "image": "image2.jpg", 
 
     "cost": "$8" 
 
     // absent item_totals 
 
    } 
 

 
    ], 
 

 
    "totals": [{ 
 
     "category": "shipping", 
 
     "amount": "$0.00", 
 
     "name": "Shipping", 
 
     "is_zero": true 
 
    }, 
 
    { 
 
     "category": "taxes", 
 
     "amount": "$0.00", 
 
     "name": "Taxes", 
 
     "is_zero": true 
 
    } 
 
    ], 
 
    "total": "$1234", 
 
    "subtotal": "$1234", 
 
    "id": "abc123", 
 
    "currency_code": "USD" 
 
} 
 

 

 
var totalAmount = _.chain(data.items) 
 
    .map(item => item.item_totals || []) // emit totals 
 
    .tap(console.log) 
 
    .reduce((memo, bucket) => memo.concat(bucket), []) // collect (flatten) 
 
    .tap(console.log) 
 
    .map(total => parseFloat(total.amount.replace('$', ''), 10)) // emit amounts 
 
    .tap(console.log) 
 
    .reduce((ret, amount) => ret + amount, 0) // collect (sum) 
 
    .value(); 
 
console.log(totalAmount);
<script src="http://underscorejs.org/underscore.js"></script>

+0

すごいです!だから、気をつけて、ありがとう。 – Tincdawg

+0

私はなぜこの値を 'totals'配列に投稿された値に加算しようとすると、それは連結されますか?注意するために、私は書式設定のために.toFixed(2)を追加しました。ありがとう! – Tincdawg

+0

おそらくどちらかが文字列だからです。数字上でのみ算術演算を実行できます。あなたは、私が 'amount amount'ステップで行ったことに類似した何かで番号に変換し、数字を追加して、必要に応じて文字列としてフォーマットする必要があります。 – weirdan

関連する問題