我从api获取信息,我将响应中的两个元素相乘,然后求和。到目前为止,这是我的代码:
function forTest(){
$http.get('/api/DaApi?di=' + '2018-11-01' + '&df=' + '2018-11-01')
.then(function(data){
$scope.result = data.data.Response;
$scope.multiplyResult = $scope.result.map(x => x.Cost * x.Quantity).reduce((a, b) => a + b, 0);
}
一切正常,但是现在我必须在总和之前进行另一次操作。假设现在我有3个元素:Cost, Quantity and Discount
:
[{Quantity: 2, Cost: 1000, Discount: -100},
{Quantity: 3, Cost: 2000, Discount: -500},
{Quantity: 2, Costo: 3130, Discount: -120}]
现在我需要乘以每成本数量,然后减去Discount(这已经是一个负数)。在相乘和相减之后,我必须对所有结果求和。我如何进行减法?我必须在map
内进行替换吗?像这样:
$scope.multiplyResult = $scope.result.map(x => (x.Cost * x.Quantity) + x.Discount)).reduce((a, b) => a + b, 0);
还是必须在reduce的内部?
请有人可以帮助我,我对理解map和reduce的用途还有点距离。我正在使用javascript和AngularJs。
先感谢
答案 0 :(得分:1)
我认为这是一个错字。
let arr = [{Quantity: 2, Cost: 1000, Discount: -100},
{Quantity: 3, Cost: 2000, Discount: -500},
{Quantity: 2, Cost: 3130, Discount: -120}];
let sum = arr.map(x => (x.Cost * x.Quantity) + x.Discount).reduce((a,b)=>a+b,0)
console.log(sum);
答案 1 :(得分:0)
您可以通过对所需的属性取destructuring assignment,然后加上总和来在一个循环中进行计算和求和。
$scope.multiplyResult = $scope.result
.reduce((sum, { Cost, Quantity, Discount }) => sum + Cost * Quantity + Discount, 0);