Javascript - 将值赋值给月数组

时间:2016-08-16 17:14:09

标签: javascript arrays assign

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

例如,如果数据库在1月份下达了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;
                    }
                }

2 个答案:

答案 0 :(得分:2)

使用变量作为索引访问数组:

import React, { Component, PropTypes } from 'react';
import ReactMixin from 'react-mixin';
import ReactFireMixin from 'reactfire';

import Firebase from '../../../utils/firebaseUtils'; // Firebase.initializeApp(config);

@ReactMixin.decorate(ReactFireMixin)
export default class Add extends Component {
    constructor(args) {
        super(args);

        this.state = {
            articles: []
        };
    }

    componentWillMount() {
        let ref = Firebase.database().ref('articles').orderByChild('insertDate').limitToLast(10);
        this.bindAsArray(ref, 'articles'); // bind retrieved data to this.state.articles
    }

    render() {
        return (
            <div>
                {
                    this.state.articles.reverse().map(function(article) {
                        return <div>{article.title}</div>
                    })
                }
            </div>
        );
    }
}

答案 1 :(得分:2)

肯定有一些事情可以改进,但它们对效率的影响可以忽略不计:

在现代引擎中,您可以使用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]++;