Tengo un objeto que se ve así:
const hours = { Monday: ['9:00 am', '4:00 pm'], Tuesday: ['9:00 am', '4:00 pm'], Wednesday:['9:00 am', '3:00 pm'] Thursday: ['9:00 am', '3:00 pm'], Friday: ['9:00 am', '3:00 pm'], Saturday: "Closed", Sunday: "Closed", }Luego obtengo el día actual de la semana en un formato de cadena:
const d = new Date(); let day = d.getDay(); const daysOfWeek = { 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday', 7: 'Sunday' } const currentDayString = daysOfWeek[day]Ahora necesito crear un nuevo objeto que tenga el día actual, hasta el domingo.
salida ex
si el día es 'viernes' las hours obj deberían ser:
{ Friday: ['9:00 am', '3:00 pm'], Saturday: "Closed", Sunday: "Closed" }¿Cómo puedo conseguir esto?
Deje que el día de hoy sea d (por ejemplo, 'lunes', 'martes') entonces, y serverData sean los datos que estamos obteniendo del servidor, entonces,
let found=0; let result={} Object.keys(daysOfWeek).forEach(key => { if (found) { result[daysOfWeek[key]] = serverData[daysOfWeek[key]] }; if (daysOfWeek[key] === d) { found = 1; } })Digamos que su día de inicio es "jueves", su objeto de resultado nunca podría ser así:
{ Thursday: (2) ['9:00 am', '3:00 pm' Friday: (2) ['9:00 am', '3:00 pm'] Saturday: "Closed" Sunday: "Closed" }Porque JS ordena un objeto alfabéticamente.
Intente insertar sus resultados en una matriz como esta ( los datos han sido los datos de su servidor):
let result = []; for(let i=day; i <= Object.keys(daysOfWeek).length; i++) { // result[daysOfWeek[i]] = data[daysOfWeek[i]]; // return object result.push(data[daysOfWeek[i]]); // return array }Se puede hacer con reduce
const data = { Monday: ['9:00 am', '4:00 pm'], Tuesday: ['9:00 am', '4:00 pm'], Wednesday: ['9:00 am', '3:00 pm'], Thursday: ['9:00 am', '3:00 pm'], Friday: ['9:00 am', '3:00 pm'], Saturday: 'Closed', Sunday: 'Closed', }; const day = new Date().toLocaleString('en', { weekday: 'long' }); const result = Object.entries(data).reduce((prev, [key, value]) => { if (key === day || day in prev) { prev[key] = value; } return prev; }, {}); console.log(result);