为什么无法对Firebase查询返回的日期数组进行排序?

时间:2019-03-29 19:26:18

标签: javascript arrays firebase sorting

我有一个对硬编码日期数组起作用的排序功能。但是,当我尝试对由Firebase查询创建的日期数组进行排序时,我无法进行排序。

//THIS DOES NOT SORT
const dayRef = firebase.database().ref('Calendar/District/' + district + '/validDays/');
dayRef.once('value').then(function (snapshot) {
    var value = snapshot.val();
    if (value) {
        snapshot.forEach(function (childSnapshot) {
            var myDate = childSnapshot.val();
            days.push(new Date(myDate.date)); //ARRAY DOES NOT SORT
        });
    }
});

// THIS SORTS MY HARD CODED ARRAY
var dates = [
    new Date(2010, 5, 10),
    new Date(2010, 2, 10),
    new Date(2010, 3, 10),
    new Date(2010, 8, 10),
    new Date(2010, 1, 10),
    new Date(2010, 6, 10),
    new Date(2010, 11, 10),
    new Date(2010, 8, 10)];

var date_sort_asc = function (date1, date2) {
    if (date1 > date2) return 1;
    if (date1 < date2) return -1;
    return 0;
};

console.log(dates.sort(date_sort_asc)) // this sorts
console.log(days.sort(date_sort_asc)) // this does not sort
</script>

我需要按升序对days数组进行排序

3 个答案:

答案 0 :(得分:2)

您正在兑现诺言。

df1.rename(columns = {0:'Name1', 1: 'Name2'}) #(doesn't work)

df1.columns.values[0] = 'Name1' #(doesn't work)
df1.columns.values[1] = 'Name2' #(doesn't work)

答案 1 :(得分:1)

您的Firebase代码是异步的。在foreach循环之后,应在.then块中排序。选中此fiddle

snapshot.forEach(function (childSnapshot) {
    var myDate = childSnapshot.val();
    days.push(new Date(myDate.date));
 });
 days.sort(date_sort_asc); // Sort here
 console.log(days);

答案 2 :(得分:0)

谢谢乔纳森·哈默尔-这就是答案... 由于您使用异步代码,因此请按快照排序。