Как сортировать поля по дате в Javascript?

# #javascript #firebase #sorting #google-cloud-firestore #key-value

Вопрос:

Мне нужна помощь, чтобы выяснить, как сортировать эти массивы по дате, которая указывается в секундах, а затем преобразуется в дату с помощью .Функция 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 в список.

Это список и выходные данные для полей и дат

Если вам нужна какая-либо дополнительная информация, пожалуйста, ответьте. Я все еще довольно новичок в stackoverflow и во всем сообществе программистов, так как мне всего 14 лет.

Спасибо вам за помощь!

Ответ №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);
      });
  });

 

Комментарии:

1. Я попробовал это решение, но, к сожалению, оно по-прежнему просто сортирует список случайным образом.

2. можете ли вы попробовать зарегистрировать список до и после сортировки?

3. Да, я зарегистрировал список до того, как он был отсортирован, а затем один раз в функции карты вот результаты вывода и код: imgur.com/a/Mce49Ew

4. Можете ли вы, пожалуйста, войти dateA и dateB просто проверить, есть ли у нас там правильные даты.

5. Вот результат, когда я регистрирую обе даты imgur.com/a/g2sQfGs