【问题标题】:Javascript - Assign values to month arrayJavascript - 为月份数组赋值
【发布时间】:2016-08-16 17:14:08
【问题描述】:

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

例如,如果数据库在一月份有 12 个订单,那么数组的 0 索引中将包含数字 12。

问题是这样我的代码看起来很糟糕,如果我想每天稍后再做,我将切换 31 个案例(看起来真的很乱)。

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

                // 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;
                    }
                }

【问题讨论】:

    标签: javascript arrays assign


    【解决方案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]++;
    

    【讨论】:

    • 谢谢,这确实是一个菜鸟问题,但也非常感谢初始化技巧;)
    【解决方案2】:

    以变量为索引访问数组:

    meses[elMes] += 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-12
      • 2011-12-22
      • 2014-06-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多