【发布时间】:2017-11-17 11:34:38
【问题描述】:
我从 firebase 获取数据
componentWillMount() {
let athleteRef = fire.database()
.ref("athlete")
.orderByChild("email")
.equalTo(this.state.email)
athleteRef
.once("value")
.then((snapshot) => {
snapshot.forEach((data) => {
let workload: number = data.val().minutes * data.val().intensity;
let datas = data.val();
let workouts = {
key: data.key,
date: datas.dateCreated,
athleteData: data.val(),
workload: workload,
};
this.setState({ workouts: [workouts].concat(this.state.workouts) });
})
});
}
我做了这个排序功能
sortByDate(arr) {
if(this.state.sortedByDate === true) {
let sorted = arr.sort((a,b) => {
new Date(a.date).getTime() - new Date(b.date).getTime());
}
this.setState({
workouts: sorted,
sortedByDate: false,
});
} else {
let sorted = arr.sort((a,b) => {
new Date(b.date).getTime() - new Date(a.date).getTime());
}
this.setState({
workouts: sorted,
sortedByDate: true,
});
}
}
经过 desc 排序后的数组如下所示(通知年份为 2016):
Array (11)
{key: "-KyocQLyhpwVHCpKJOBv", date: "13/11/2017", athleteData: Object, workload: 1}
{key: "-KyR0ovLXga6zlHX4J40", date: "08/11/2017", athleteData: Object, workload: 30}
{key: "-KyPny-m5OjAdK0C133e", date: "08/11/2017", athleteData: Object, workload: 80}
{key: "-KvRKjbTmbvajvcijYl2", date: "02/10/2017", athleteData: Object, workload: 72}
{key: "-KvOv-2gZ1U46btx62Lg", date: "01/09/2017", athleteData: Object, workload: 120}
{key: "-KyR0rqVt34A-_TYdpH9", date: "01/01/2017", athleteData: Object, workload: 60006}
{key: "-KyR0qf78bi7S1xE7QyE", date: "01/01/2017", athleteData: Object, workload: 100000}
{key: "-KvXHVN6MsfQS-j6aAx9", date: "01/01/2017", athleteData: Object, workload: 100000}
{key: "-KyR0kW7WWE9N5SIM9hz", date: "01/01/2016", athleteData: Object, workload: 5000000000}
{key: "-KvMBqOTfcQpf1nJsY-V", date: "21/09/2017", athleteData: Object, workload: 80}
{key: "-KvMBbaNmbeg9h66YNoj", date: "01/10/2017", athleteData: Object, workload: 100}
在我运行函数的 asc 部分后,我得到:
{key: "-KyocQLyhpwVHCpKJOBv", date: "13/11/2017", athleteData: Object, workload: 1}
{key: "-KyR0kW7WWE9N5SIM9hz", date: "01/01/2016", athleteData: Object, workload: 5000000000}
{key: "-KyR0rqVt34A-_TYdpH9", date: "01/01/2017", athleteData: Object, workload: 60006}
{key: "-KyR0qf78bi7S1xE7QyE", date: "01/01/2017", athleteData: Object, workload: 100000}
{key: "-KvXHVN6MsfQS-j6aAx9", date: "01/01/2017", athleteData: Object, workload: 100000}
{key: "-KvOv-2gZ1U46btx62Lg", date: "01/09/2017", athleteData: Object, workload: 120}
{key: "-KvRKjbTmbvajvcijYl2", date: "02/10/2017", athleteData: Object, workload: 72}
{key: "-KyR0ovLXga6zlHX4J40", date: "08/11/2017", athleteData: Object, workload: 30}
{key: "-KyPny-m5OjAdK0C133e", date: "08/11/2017", athleteData: Object, workload: 80}
{key: "-KvMBqOTfcQpf1nJsY-V", date: "21/09/2017", athleteData: Object, workload: 80}
{key: "-KvMBbaNmbeg9h66YNoj", date: "01/10/2017", athleteData: Object, workload: 100}
所以...是的,这几乎是正确的,但是一些记录完全不合适:)
我也试过用
moment().format("YYYY-MM-DD")
但这给出了相同的输出......关于为什么的任何建议? 谢谢!
【问题讨论】:
-
从排序函数中移除多余的
{}大括号。 -
你把log命令放在哪里了?在
arr.sort(...)之后? -
在
componentWillMount()中调用async不是一个好主意,因为此方法不会在调用render()之前等待数据返回 -
感谢提及...那么我应该在哪里加载数据呢?
标签: javascript reactjs sorting ecmascript-6 compare