Javascript - 为月数组赋值

Javascript - Assign values to month array

有一个来自 AJAX 请求的日期结果集,我想创建一个长度为 12 的数组,其中包含这些日期每个月的订单数量,目的是制作图表ChartJS.

例如,如果数据库在 1 月下达了 12 个订单,则数组的 0 索引中将包含数字 12。

问题是我的代码这样看起来很糟糕,如果我想每天晚些时候做,我将有一个包含 31 个案例的 switch(那看起来真的很乱)。

代码有效,但我想要一种更有效的方法。

                // Array with quantity of orders per month
                var meses= [0,0,0,0,0,0,0,0,0,0,0,0];

                for(var i in data) {
                    // Create new Date from each orderDate
                    var originalDate = data[i].orderDate;
                    var myDate= new Date(Date.parse(laFechaOriginal));
                    var elMes = myDate.getMonth();
                    // According to the month number, the same index number in the array will increment its value by 1
                    switch(elMes) {
                        case 0:
                            meses[0] += 1;
                            break;
                        case 1:
                            meses[1] += 1;
                            break;
                        case 2:
                            meses[2] += 1;
                            break;
                        case 3:
                            meses[3] += 1;
                            break;
                        case 4:
                            meses[4] += 1;
                            break;
                        case 5:
                            meses[5] += 1;
                            break;
                        case 6:
                            meses[6] += 1;
                            break;
                        case 7:
                            meses[7] += 1;
                            break;
                        case 8:
                            meses[8] += 1;
                            break;
                        case 9:
                            meses[9] += 1;
                            break;
                        case 10:
                            meses[10] += 1;
                            break;
                        case 11:
                            meses[11] += 1;
                            break;
                    }
                }

以变量为索引访问数组:

meses[elMes] += 1;

其中肯定有一些您可以改进的地方,但它们对效率的影响可以忽略不计:

在现代引擎中,您可以将数组初始化替换为 Array.prototype.fill

var meses = Array(12).fill( 0 );

如果 data 是一个数组,您应该 not use a for .. in 循环遍历它。您可以将其替换为正常的计数循环:

for ( var i = 0; i < data.length; i++ )

Date constructor 已经隐式调用了 Date.parse,因此您可以删除对 Date.parse 的调用:

 var myDate= new Date(laFechaOriginal);

您可以将整个 switch 语句替换为:

meses[elMes]++;