在同一数组上将两个元素相乘后减去一个数组的元素

时间:2018-11-12 22:23:28

标签: javascript

我从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。

先感谢

2 个答案:

答案 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);