JavaScript根据周和月对日期进行排序,以汇总金额

JavaScript根据周和月对日期进行排序,以汇总金额,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图从数组中对本周、上周、本月和上月的利润进行排序。sameple数据: var arr = [{date: '2017/12/16', profit: 12.50}, {date: '2017/05/01', profit: 13.50}, {date: '2017/04/20', profit: 14.50}, {date: '2017/03/10', profit: 15.50}, {date: '2017/08/15', profit: 16.50}, {date: '2017/08

我试图从数组中对本周、上周、本月和上月的利润进行排序。sameple数据:

var arr = [{date: '2017/12/16',  profit: 12.50},
{date: '2017/05/01', profit: 13.50},
{date: '2017/04/20', profit: 14.50},
{date: '2017/03/10', profit: 15.50},
{date: '2017/08/15', profit: 16.50},
{date: '2017/08/16', profit: 26.50},
{date: '2017/08/24', profit: 16.50},
{date: '2017/08/25', profit: 36.50},
{date: '2017/03/06', profit: 17.50},
{date: '2017/02/04', profit: 18.50},
{date: '2017/01/07', profit: 19.50}];
我想根据这个星期/上周/这个月/上个月来排序并获得利润。我尝试过用以下方法获得今天和昨天的利润:

var today = getTodayDate();
var todayProfit = 0;

for(var i = 0; i < arr.length; i++){
if(arr[i].date == today){
    todayProfit = arr[i].total;
    break;
}
}

要按日期排序,请使用
arr.sort()
,这将对其进行适当排序,这样您就不需要另一个数组:

arr.sort(function(a,b){
    return new Date(a.date)-new Date(b.date);
});
如果您喜欢短代码,请使用箭头功能:

arr.sort((a,b)=>new Date(a.date)-new Date(b.date));
然后,要计算本周/上周/月,请使用:

var-arr=[
{日期:2017/12/16,利润:12.50},
{日期:2017/05/01,利润:13.50},
{日期:2017/04/20,利润:14.50},
{日期:2017/03/10,利润:15.50},
{日期:2017/08/15,利润:16.50},
{日期:2017/08/16,利润:26.50},
{日期:2017/08/24,利润:16.50},
{日期:2017/08/25,利润:36.50},
{日期:2017/03/06,利润:17.50},
{日期:2017/02/04,利润:18.50},
{日期:2017/01/07,利润:19.50}
];
var利润=[0,0,0,0];//这个/上周,这个/上个月
风险值日期;
本周功能(d){
//本周的开始和结束
var thisWeek=[moment().utc().startOf('week'),
时刻().utc().endOf('周')];
返回d.isBetween(本周[0],本周[1])||
d、 IsName(本周[0])||
d、 isSame(本周[1]);
}
功能isLastWeek(d){
//本周的开始和结束减去1,即上周
var lastWeek=[moment().utc().subtract(1,'weeks').startOf('week'),
矩().utc().subtract(1,'weeks').endOf('weeks');
返回d.isBetween(上周[0],上周[1])||
d、 IsName(上周[0])||
d、 IsName(上周[1]);
}
功能是本月(d){
//这个月的开始和结束
var thismount=[moment().utc().startOf('month'),
矩().utc().endOf('month')];
返回d.isBetween(本月[0],本月[1])||
d、 IsName(本月[0])||
d、 IsName(本月[1]);
}
函数isLastMonth(d){
//本月的开始和结束减去1,即上个月
var lastmount=[moment().subtract(1,'months').utc().startOf('month'),
矩()减去(1,'month').utc().endOf('month');
返回d.isBetween(上个月[0],上个月[1])||
d、 IsName(上个月[0])||
d、 IsName(上个月[1]);
}
arr.forEach(功能(e){
日期=时刻utc(例如日期'YYYY-MM-DD');
如果(是本周(日期)){//如果是本周
利润[0]+=e.利润;
}else if(isLastWeek(date)){//如果是上周
利润[1]+=e.利润;
}
if(isThisMonth(date)){//如果是这个月
利润[2]+=e.利润;
}else if(isLastMonth(date)){//如果是最后一个月
利润[3]+=e.利润;
}
});
log(“本周利润:+利润[0]);
log(“上周利润:+利润[1]);
log(“本月利润:+利润[2]);
console.log(“上月利润:+利润[3])

您不需要排序。您只需检查当天、昨天或本月,并在迭代时汇总值:

 const today = "2017/08/26", yesterday = " 2017/08/25";
 const month = today.substr(0,-3);

 //results
 let profit = {
  today:0,
  yesterday:0,
  month:0
 };

arr.forEach(({date,profit}) =>{
 if(date === today) profit.today += profit;
 if(date === yesterday) profit.yesterday += profit;
 if(date.substr(0,-3) === month) profit.month += profit;
});

console.log( profit );

对不起,我的意思是,我想根据本周、上周、本月和上月等标准对利润进行分组。期望的产出到底是多少?一个数组,一个对象,每个条件的变量?是的,它应该只是每个条件的一个数字。我已经更新了问题!你所说的本周/月上周/月是什么意思,它们只是今天(+-)7/今天(+-)30吗?@guest176969我在更新的答案中解释说,我用
startOf('week')
endOf('week')
startOf('month')
endOf('month')
来确定本周/月。对不起,我的英语不好。但是有没有办法让这周、上周、本月和上个月的身体健康呢?@guest176969它就是这么做的?你至少试过了吗?是的,我是在一些图书馆的帮助下做的,以确定日期。谢谢
 const today = "2017/08/26", yesterday = " 2017/08/25";
 const month = today.substr(0,-3);

 //results
 let profit = {
  today:0,
  yesterday:0,
  month:0
 };

arr.forEach(({date,profit}) =>{
 if(date === today) profit.today += profit;
 if(date === yesterday) profit.yesterday += profit;
 if(date.substr(0,-3) === month) profit.month += profit;
});

console.log( profit );