.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,
объект для хранения дат, и любой for или reduce, но никак не map. примеров на форуме масса, но похоже проще снова написать. кто быстрее?))) |
NeonMan,
const DATA напишите нормально хотя бы, с кавычками. |
Вы конечно меня извините тов. профессор, но в записи const DATA = [] кавычки не нужны.
|
NeonMan,
офигеть!!! а давайте так, вы мне кавычки, а я вам div-ы?))) |
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,
ок! |
И раз уж в этой теме у нас вопрос о датах, хотел бы уточнить еще один момент, что бы не создавать доп. тему на форме.
Что бы получить дату "завтра", это самый удобный способ или есть еще какие-то альтернативы? const today = new Date() let tomorrow = new Date() tomorrow.setDate(today.getDate() + 1) |
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>
|
Весьма интересная реализация, спасибо.
|
| Часовой пояс GMT +3, время: 08:23. |