Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

125
Views
bucle for reemplazando todos los elementos anteriores en la matriz

Estoy tratando de crear una serie de fechas basadas en una serie de semanas.

Hay cuatro semanas con 5 días cada una, cada semana es un objeto que contiene el número de semana y una matriz de 5 días; los días son objetos que contienen el día y la fecha.

weeks[0].days[0].day devolvería el lunes, por ejemplo.

Uso LuxonJS para generar la fecha según el número de semana y el día de la semana usando la función generateDate(weekNr, dayNr) .

Para completar el valor de la date en los elementos del día de la semana, he intentado lo siguiente:

 for(x = 0; x <= weeks.length; x++){ for(y = 0; y <= weeks[x].days.length; y++){ weeks[x].days[y]['date'] = generateDate(weeks[x].weekNr, y) } }

Sin embargo, por alguna razón, los días de cada semana ahora se llenan con las fechas de la última semana, por lo que weeks[0].days[4].date devolvería exactamente la misma fecha que weeks[3].days[4].date . En otras palabras, aparte del número de semana, las 4 semanas se vuelven idénticas.

Si registro las fechas en el bucle for, todas aparecen correctamente, por lo que parece que se reemplazan cada vez que se repite el primer bucle for. ¿Alguien sabe lo que estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Este comportamiento probablemente esté relacionado con la forma en que construyó la matriz de weeks original. Parece que asignó el mismo objeto a las cuatro entradas en weeks , en lugar de crear un nuevo objeto para cada entrada.

Luego, cuando ejecute ese ciclo anidado, estará mutando el mismo objeto para cada iteración del ciclo externo. Así que asegúrese de crear un nuevo objeto cada vez que asigne (o envíe) un objeto a la matriz de weeks .


Como nota al margen, así es como lo haría en JavaScript vainilla:

 function getWeekDays(year, weekNr) { let dt = new Date(year, 0, 4); // 4 January is always in week #1 // Get Sunday before the start of the week dt.setDate(dt.getDate() - (dt.getDay() || 7) - 7 + weekNr * 7); return { weekNr, days: Array.from({length: 5}, () => { dt.setDate(dt.getDate() + 1); // Increment date return { day: dt.toLocaleDateString("en", { weekday: 'long'}), date: dt.toLocaleDateString("en-SE") }; }) }; } function getMonthDays(year, firstWeek, numWeeks) { return Array.from({length: numWeeks}, () => getWeekDays(year, firstWeek++)); } // Example creation of the weeks array let weeks = getMonthDays(2022, 9, 4); console.log(weeks);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!