我正在尝试为我的parseFloat方程添加一个过滤器。
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers.offersTotal.total += parseFloat(offer.addOffers);
});
所以这里发生的是数据库表中的每个商品,我正在添加列' addBaskets' - 例如,我为该1项业务提供7项优惠。但是还有另一个名为“发布”的专栏。设置为TRUE
或FALSE
。
所以一个人很好,因为它是offersTotal
。但是我希望offersActive
和offersDeactivated
使用published = true
和published = false
作为过滤器......但是如何?
$scope.getTotalOffers = response.data.offers;
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers.offersTotal.total += parseFloat(offer.addOffers);
});
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers.offersActive.total += parseFloat(offer.addOffers); *needs published = true*
});
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers.offersDeactivated.total += parseFloat(offer.addOffers); *needs published = false*
});
我无法理解如何添加此过滤器。提前致谢!
答案 0 :(得分:1)
有几种方法可以做到这一点。一个简单的解决方案是使用published
作为乘法因子,或作为三元运算符中的条件,但更好的解决方案是动态引用offersActive
或offersDeactivated
属性,基于价值addOffers
:
var props = ['offersDeactivated', 'offersActive'];
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers[props[+offer.published]].total += parseFloat(offer.addOffers);
// This you already had, and can stay as it is:
$scope.countOffers.offersTotal.total += parseFloat(offer.addOffers);
});
因此,这将两个循环的原始想法转变为一个循环。
答案 1 :(得分:0)
要做的就是在之前过滤项目:
。$scope.getTotalOffers = response.data.offers;
$scope.getTotalOffers.forEach(function (offer) {
$scope.countOffers.offersTotal.total += parseFloat(offer.addOffers);
});
$scope.getTotalOffers
.filter(function (offer) {
return offer.published;
})
.forEach(function (offer) {
$scope.countOffers.offersActive.total += parseFloat(offer.addOffers);
});
$scope.getTotalOffers
.filter(function (offer) {
return !offer.published;
})
.forEach(function (offer) {
$scope.countOffers.offersDeactivated.total += parseFloat(offer.addOffers);
});
这是一个稍微优雅的版本,使用reduce
代替forEach
:
$scope.getTotalOffers = response.data.offers;
$scope.countOffers.offersTotal.total = $scope.getTotalOffers.reduce(function (acc, offer) {
return acc + parseFloat(offer.addOffers);
}, 0);
$scope.countOffers.offersActive.total = $scope.getTotalOffers
.filter(function (offer) {
return offer.published;
})
.reduce(function (acc, offer) {
return acc + parseFloat(offer.addOffers);
}, 0);
$scope.countOffers.offersDeactivated.total = $scope.getTotalOffers
.filter(function (offer) {
return !offer.published;
})
.reduce(function (acc, offer) {
return acc + parseFloat(offer.addOffers);
}, 0);
由于reduce
部分都是相同的,我们可以将它们分解出来:
function addUpOffers(offers) {
return offers.reduce(function (acc, offer) {
return acc + parseFloat(offer.addOffers);
}, 0);
}
$scope.getTotalOffers = response.data.offers;
$scope.countOffers.offersTotal.total = addUpOffers($scope.getTotalOffers);
$scope.countOffers.offersActive.total = addUpOffers(
$scope.getTotalOffers.filter(function (offer) {
return offer.published;
})
);
$scope.countOffers.offersDeactivated.total = addUpOffers(
$scope.getTotalOffers.filter(function (offer) {
return !offer.published;
})
);