Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2023, 22:55
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

.map по дате (RE open)
Здесь нужен некий хитроумный алгортим коллеги ) Опишу детали:
Имеем массив данных, в каждом объекте которого есть уникальный Title и дата, но дата за одно и тоже число может поваторяться, уникальный только title
const DATA = [
{
 title: title_1,
 date: 06/02/2023
},
{
 title: title_2,
 date: 06/02/2023
},

{
 title: title_3,
 date: 07/02/2023
},
{
 title: title_4,
 date: 07/02/2023
},

{
 title: title_5,
 date: 08/02/2023
},
{
 title: title_6,
 date: 08/02/2023
},
]


Когда запускаем итерации data.map(item => (
необходимо создавать контейнер(пусть это будет div)
его название будет первая уникальная дата
<div 06/02/2023(item.date)>
и в этом же контейнере нужно создавать снова div и в нем указывать title за эту дату
</div>
Вот что должно получиться:
<div 06/02/2023>
 <div>title_1</div>
 <div>title_2</div>
</div>

<div 07/02/2023>
 <div>title_3</div>
 <div>title_4</div>
</div>

<div 08/02/2023>
 <div>title_5</div>
 <div>title_6</div>
</div>

))

match по конкретной дате не подойдет, т.к. дата будет всегда у первого объекта - 'сегодня' (объектов с датой 'сегодня' может быть несколько подряд) , следующая уникальная дата сегодня + 1 и т.д.

Может как-то нужно сравнивать предедущий item.date с фактическим при итерации ? if(prev.item.date != item.date)

Вероятно нужно использовать .reduce

Последний раз редактировалось NeonMan, 06.02.2023 в 23:12.
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2023, 23:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NeonMan,
объект для хранения дат, и любой for или reduce, но никак не map. примеров на форуме масса, но похоже проще снова написать. кто быстрее?)))
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2023, 23:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NeonMan,
const DATA напишите нормально хотя бы, с кавычками.
Ответить с цитированием
  #4 (permalink)  
Старый 06.02.2023, 23:51
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

Вы конечно меня извините тов. профессор, но в записи const DATA = [] кавычки не нужны.
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2023, 00:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NeonMan,
офигеть!!! а давайте так, вы мне кавычки, а я вам div-ы?)))
Ответить с цитированием
  #6 (permalink)  
Старый 07.02.2023, 00:13
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

const DATA = [
{
 title: 'title_1',
 date: '06/02/2023'
},
{
 title: 'title_2',
 date: '06/02/2023'
},
 {
 title: 'title_3',
 date: '07/02/2023'
},
{
 title: 'title_4',
 date: '07/02/2023'
},
{
 title: 'title_5',
 date: '08/02/2023'
},
{
 title: 'title_6',
 date: '08/02/2023'
},
]


Вероятно речь идет о кавычках для string ?

Последний раз редактировалось NeonMan, 07.02.2023 в 00:37.
Ответить с цитированием
  #7 (permalink)  
Старый 07.02.2023, 00:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NeonMan,
ок!
Ответить с цитированием
  #8 (permalink)  
Старый 07.02.2023, 00:43
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

И раз уж в этой теме у нас вопрос о датах, хотел бы уточнить еще один момент, что бы не создавать доп. тему на форме.

Что бы получить дату "завтра", это самый удобный способ или есть еще какие-то альтернативы?

const today = new Date()
let tomorrow =  new Date()
tomorrow.setDate(today.getDate() + 1)
Ответить с цитированием
  #9 (permalink)  
Старый 07.02.2023, 00:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NeonMan,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        [data-date] {
            border: 1px solid red;
        }

        [data-date]:before {
            content: attr(data-date);
            background-color: #F0E68C;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function() {

            const DATA = [{
                    title: 'title_1',
                    date: '06/02/2023'
                },
                {
                    title: 'title_2',
                    date: '06/02/2023'
                },
                {
                    title: 'title_3',
                    date: '07/02/2023'
                },
                {
                    title: 'title_4',
                    date: '07/02/2023'
                },
                {
                    title: 'title_5',
                    date: '08/02/2023'
                },
                {
                    title: 'title_6',
                    date: '08/02/2023'
                },
            ];
            const obj = {};
            let div = document.createElement('div');
            let arrHTML = DATA.reduce((arr, {
                title,
                date
            }) => {
                let clone = obj[date];
                if (!clone) {
                    obj[date] = clone = div.cloneNode();
                    arr.push(clone);
                    clone.dataset.date = date
                };
                let child = div.cloneNode();
                child.textContent = title;
                clone.append(child);
                return arr;
            }, []);
            document.body.append(...arrHTML)
        })
    </script>
</head>

<body>
</body>

</html>

Последний раз редактировалось рони, 07.02.2023 в 00:51.
Ответить с цитированием
  #10 (permalink)  
Старый 07.02.2023, 11:49
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

Весьма интересная реализация, спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отсортировать массив по просроченной дате Aidec Общие вопросы Javascript 4 03.02.2023 00:06
.map по дате NeonMan Элементы интерфейса 4 30.01.2023 17:28
Контраст даты в сегодняшней дате и дате покупки в MY SQL Jansen Оффтопик 3 03.10.2022 07:15
Не срабатывает событие open для диалогового окна jquery-ui mihail_p AJAX и COMET 4 19.06.2013 22:23
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 13:39