#javascript #arrays #function #data-structures #calendar
Вопрос:
Я работаю над личным проектом, и я сталкиваюсь, я бы сказал, с «Проблемой структуры данных», если выразить это несколькими словами. Идея состоит в том, чтобы создать календарь, в котором отображаются дни месяца и действия, выполняемые пользователями в определенный день.
Структура пользовательских данных выглядит примерно так:
const userData = [
{ "id": "user1",
"calendar": [
{day: moment({ M: 2, d: 8 }).format("D, M, YYYY"), activity: "WorkOut" }, {}, {}, {}] },
{Other user}, {Other user}
]
Это массив объектов пользователя, но важной частью пользователя является «календарь», который содержит объекты с надписью «В этот конкретный день у меня есть эта деятельность».
Я создаю функцию, которая использует эти две вещи в качестве ссылки:
-Данные одного пользователя
-Массив, содержащий один объект момента для каждого дня месяца
let monthDates = new Array(dateObject.daysInMonth())
.fill(null)
.map((x, i) => moment(dateObject).startOf('month').add(i, 'days'));
let createObjectOfDatesArray = (data) => {
monthDates.map(day => {
if (data.length > 0) {
data.map(item => {
if (day.format("D, M, YYYY") === item.day) {
let day = item.day
let activity = item.activity
datesObjectsArray.push(new Object({ day, activity }))
}
})
}
let dayFormated = day.format("D")
datesObjectsArray.push(new Object({ day: dayFormated }))
})
}
createObjectOfDatesArray(userData[0].calendar)
Что должна делать эта функция?
Он повторяет каждый объект момента месяца (каждый элемент даты месяца). В случае, если у него есть (данные), он повторяет эти данные еще раз, и в случае, если день, назначенный пользователем его календарю, совпадает с днем, когда он был повторен; он создает объект с днем и активностью ({day: "", activity: ""})
для хранения в массиве (datesObjectsArray).
В случае, если этого не произойдет, просто сохраните объект, содержащий ({day: ""})
в своем массиве только день (datesObjectsArray).
The idea is that this array represents in the screen a calendar, with each day of the month. In case that the user has an activity in an specific day it should shows too.
The problem: the problem appears when, in the iteration of each day of the month, it also iterates through the array of the user data.
Вопрос: какова была бы логика создания функции, которая возвращает массив с каждым днем, и в случае, если к определенному дню прикреплена какая-либо активность, ее следует переместить в массив? Что-то вроде этого:
const datesObjectsArray = [ { day: “1”}, // The user doesn't have an activity this day
{ day: “2”}, //The user doesn't have an activity this day
{ day: “2”, actividad “WorkOut” } ] //The user has an activity this day