JavaScript как просуммировать все значения массива за период дат
Буду благодарен за помощь. Нужно просуммировать данные из массива за период дат, а конкретнее за месяц по ключу money. Сума должна быть общая за последний месяц. В одном случае должен быть общий подсчет всех данных из массива, а в втором где is_ftd true. Не знаю как правильно работать с такими условиями. Можно ли брать отсчет за последние 30 дней или нужно как-то работать с конкретним диапазоном. Вот пример массива:
var data = [
{
"id": 35,
"money": 211.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 36,
"money": 31.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 37,
"money": 89.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 38,
"money": 1274.0,
"date": "2021-02-10",
"is_ftd": false
},
{
"id": 39,
"money": 23.0,
"date": "2021-02-10",
"is_ftd": false
}
];
Ответы (1 шт):
Автор решения: Konstantin Modin
→ Ссылка
Можно например так:
var data = [
{
"id": 35,
"money": 211.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 36,
"money": 31.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 37,
"money": 89.0,
"date": "2021-02-10",
"is_ftd": true
},
{
"id": 38,
"money": 1274.0,
"date": "2021-02-10",
"is_ftd": false
},
{
"id": 39,
"money": 23.0,
"date": "2021-02-10",
"is_ftd": false
},
{
"id": 139,
"money": 23.0,
"date": "2021-01-31",
"is_ftd": false
}
];
const lastMonth = moment().month();
const res = data.reduce((acc, { date, money } ) => {
return acc + (moment(date).month() === lastMonth ? money :0)
}, 0)
console.log(res);
//----------------------------------------------
const resIsFtdTrue = data.reduce((acc, { date, money, is_ftd } ) => {
return acc + (moment(date).month() === lastMonth && is_ftd ? money :0)
}, 0)
console.log(resIsFtdTrue);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>