从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;
}
}
答案 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]++;