首页 > 解决方案 > 如何为没有销售的月份添加 0?

问题描述

我有一个数组:

  let sales=  [
       { _id: { year: 2020, month: 3 }, total_sales: 1800 },
       { _id: { year: 2020, month: 4 }, total_sales: 5700 },
       { _id: { year: 2020, month: 5 }, total_sales: 6630 },
       { _id: { year: 2020, month: 6 }, total_sales: 690 },
       { _id: { year: 2020, month: 7 }, total_sales: 1600 },
       { _id: { year: 2020, month: 8 }, total_sales: 13430 }
     ]

我想要做的是,将月份转换为名称

            let months = []
            let sales = []
            var m = ["January", "February", "March", "April", "May", "June",
                "July", "August", "September", "October", "November", "December"]

            for (let i = 0; i < sales.length; i++) {
                if (sales.length === 6) {
                    var monthName = m[sales[i]._id.month - 1]
                    months.push(monthName)
                    sales.push(sales[i].total_sales)
                }
            }

按预期返回以下内容。

["March", "April", "May", "June", "July", "August"] 
[1800, 5700, 6630, 690, 1600, 13430]

但是,如果数组中缺少一个月,我该如何重新排列它以显示月份total_sales=0名称。

展示案例:

 [
       { _id: { year: 2019, month: 12 }, total_sales: 1800 },
       { _id: { year: 2020, month: 1 }, total_sales: 5700 },
       { _id: { year: 2020, month: 2 }, total_sales: 6630 },
       { _id: { year: 2020, month: 4 }, total_sales: 690 },
       { _id: { year: 2020, month: 6 }, total_sales: 1600 },
       { _id: { year: 2020, month: 8 }, total_sales: 13430 }
     ]

预期结果:

["August","September","October","November",
"December","January","February","March", "April", 
"May", "June", "July", "August"] 

[0, 0, 0, 0, 1800, 5700, 6630, 0, 690, 0, 1600, 0, 13430]

Every 12 month period.

标签: javascriptnode.js

解决方案


下面怎么样

    let months = []
    let sales = []
    var m = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"]
    
    const firstEntry = this.props.salesGraph.sales[0]._id;
    
    const startMonth = firstEntry.year*12+firstEntry.month;
    const lastIteratedMonth = startMonth-1;
    for (let i = 0; i < this.props.salesGraph.sales.length; i++) {
        let currentEntry = this.props.salesGraph.sales[i]._id;
        let currentMonth = currentEntry.year*12+currentEntry.month;
        while(lastIteratedMonth+1 < currentMonth) {
            //Fill missing months with 0
            var monthName = m[lastIteratedMonth%12-1];
            months.push(monthName);
            sales.push(0);
            lastIteratedMonth++;
        }
        let monthName = m[currentEntry.month - 1];
        months.push(monthName);
        sales.push(this.props.salesGraph.sales[i].total_sales);
        lastIteratedMonth++;
    }
    

推荐阅读