@1233211

Как правильно отсортировать объекты по дате в формате «240389»?

Есть массив с объектами, у объектов есть поле "date", формат даты там записан так "240389". Как правильно взять объекты из массива на текущую дату, на вчерашнюю и на завтрашнюю (желательно в разные массивы складывать)?
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 3
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
const arr = [
	{ date: '230389' },
	{ date: '230389' },
	{ date: '230389' },
	{ date: '240389' },
	{ date: '240389' },
	{ date: '250389' },
	{ date: '250389' },
]

const currentDate = new Date('1989-03-24');

const res = arr.reduce((result, item) => {
	const matches = item.date.match(/\d{2}/g).reverse()
	const isoFormat = [`19${matches[0]}`, ...matches.slice(1)]
	const date = new Date(isoFormat)

	switch (currentDate.getDate() - date.getDate()) {
		case 1:
			result.yesterday.push(item)
			break;
		case 0:
			result.today.push(item)
			break;
		case -1:
			result.tomorrow.push(item)
			break;
	}

	return result
}, {
		yesterday: [],
		today: [],
		tomorrow: []
	})

на скорую руку накидал, работает только с датами на 19.., но можно сделать чтобы и с 2000+ работало
Ответ написан
Комментировать
@vladdimir
Верстальщик
Сначала нормализуете данные, чтобы можно было работать через объект Date (слева список методов, справа общее описание) , а потом делаете то, что вам нужно.

Подумал, что редко работаю с датами, решил потренироваться, набросал небольшой топорный пример того, как это можно реализовать:
https://jsfiddle.net/e8ct1kza/7/
Ответ написан
Комментировать
Robur
@Robur
Знаю больше чем это необходимо
const filtered = array.filter(...оставить только вчерашние, сегодняшние, завтрашние...)
const grouped = lodash.groupBy(filtered, 'date')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы