【问题标题】:How to sort fields by date in Javascript?如何在Javascript中按日期对字段进行排序?
【发布时间】:2021-10-03 15:22:39
【问题描述】:

我需要一些帮助来了解如何按以秒为单位的日期对这些数组进行排序,然后使用 .toDate 函数将其转换为日期。

const todoList = document.querySelector('.upcoming ul');
            const generateTemplate = (todo, date) => {
                const html = `<h5 style="padding-top: 5px; font-weight: 375; margin-top: auto;">${date}</h5><li>
                ${todo} 
                </li>`
                todoList.innerHTML += html;
            };

            let events = [];


            db.collection("Users").doc(user.uid).get().then((doc) => {
                var gid = doc.get("group");

                db.collection("Groups").doc(gid).get()
                    .then((document) => {
                        var fields = Object.keys(document.data());
                        var dates = Object.values(document.data());
                        console.log(fields);
                        console.log(dates);

                        const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };

                        fields.forEach(field => {
                            var date = document.get(field).toDate().toLocaleDateString('de-DE', options)
                            var now = new Date();

                            if (document.get(field).toDate() < now) {
                                var path = db.collection("Groups").doc(gid);
                                path.update({
                                    [field]: firebase.firestore.FieldValue.delete()
                                });
                            }
                            generateTemplate(field, date);
                        });
                    });


            });

我不确定如何解决这个问题,因为我正在使用 forEach 循环将所有 innerHTML 添加到列表中。

This is the list and the outputs for the fields and the dates

如果您需要任何进一步的信息,请回复。我才 14 岁,对 stackoverflow 和整个编程社区还是很陌生。

感谢您的帮助!

【问题讨论】:

    标签: javascript firebase sorting google-cloud-firestore key-value


    【解决方案1】:

    您可以在映射字段之前使用数组排序,如下所示:

    db.collection("Groups")
      .doc(gid)
      .get()
      .then((document) => {
        var fields = Object.keys(document.data());
        var dates = Object.values(document.data());
        console.log(fields);
        console.log(dates);
    
        const options = {
          weekday: "long",
          year: "numeric",
          month: "long",
          day: "numeric",
        };
    
        fields
          .sort(function (a, b) {
    
            return document
              .get(b).seconds - document
              .get(a).seconds;
          })
          .map((field) => {
            var date = document
              .get(field)
              .toDate()
              .toLocaleDateString("de-DE", options);
            var now = new Date();
    
            if (document.get(field).toDate() < now) {
              var path = db.collection("Groups").doc(gid);
              path.update({
                [field]: firebase.firestore.FieldValue.delete(),
              });
            }
            generateTemplate(field, date);
          });
      });
    
    

    【讨论】:

    • 我尝试了这个解决方案,但不幸的是它仍然只是随机排序列表。
    • 可以尝试在排序前后记录列表吗?
    • 是的,我在排序之前记录了列表,然后在地图功能中一次是结果输出和代码:imgur.com/a/Mce49Ew
    • 您可以登录dateAdateB 看看我们是否有合适的日期。
    • 这是我记录两个日期时的输出imgur.com/a/g2sQfGs
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多