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

140
Views
Cómo filtrar la lista de objetos que no coincide con alguna condición en otra lista de objetos

Tengo una matriz de objetos de horas de trabajo opcionales de algunos negocios (saltos de 5 minutos).

Además, tengo una matriz de objetos de citas.

Quiero filtrar las horas de trabajo opcionales si hay una cita existente entre esas horas.

Probé esta solución con la biblioteca moment.js:

 const optionalWorkingHours = [ { from: "05:00", to: "05:05" }, { from: "05:05", to: "05:10" }, { from: "05:10", to: "05:15" }, { from: "05:15", to: "05:20" }, // .... ]; const appointments = [ { from: "05:00", to: "05:05" }, { from: "05:30", to: "06:00" }, { from: "07:50", to: "08:00" } ]; const availableHours = optionalWorkingHours.filter((o) => { const optionalFrom = moment(o.from, "HH:mm"); const optionalTo = moment(o.to, "HH:mm"); return appointments.some((c) => { const currentFrom = moment(c.from, "HH:mm"); const currentTo = moment(c.to, "HH:mm"); const isBusyHours = currentFrom.isSameOrAfter(optionalFrom, "hour") && currentTo.isSameOrBefore(optionalTo, "hour"); return !isBusyHours; }); });

Resultado actual: horas de trabajo disponibles duplicadas

Resultado esperado: matriz de horas de trabajo disponibles que no se superponen con la matriz de citas.

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

0

No es tan fácil, pero tu verificación en .some() no estaba completa en mi opinión. ¿Puedes probar con esa solución?

 const optionalWorkingHours = [ { from: "05:00", to: "05:05" }, // no { from: "05:05", to: "05:10" }, { from: "05:10", to: "05:15" }, { from: "05:15", to: "05:20" }, { from: "05:20", to: "05:25" }, { from: "05:25", to: "05:30" }, { from: "05:30", to: "05:35" }, // no { from: "05:35", to: "05:40" }, // no { from: "05:40", to: "05:45" }, // no { from: "05:45", to: "05:50" }, // no { from: "05:50", to: "05:55" }, // no { from: "05:55", to: "06:00" }, // no { from: "06:00", to: "06:05" }, // // .... ]; const appointments = [ { from: "05:00", to: "05:05" }, { from: "05:30", to: "06:00" }, { from: "07:50", to: "08:00" } ]; const availableHours = optionalWorkingHours.filter((o) => { const optionalFrom = moment(o.from, "HH:mm"); const optionalTo = moment(o.to, "HH:mm"); const check = appointments.some((appointment) => { const appointmentFrom = moment(appointment.from, "HH:mm"); const appointmentTo = moment(appointment.to, "HH:mm"); const isBusyHours = (optionalFrom.isSame(appointmentFrom) && optionalTo.isSame(appointmentTo)) || (optionalFrom.isSame(appointmentFrom) && optionalTo.isBetween(appointmentFrom, appointmentTo)) || (optionalFrom.isBetween(appointmentFrom, appointmentTo) && optionalTo.isSame(appointmentTo)) || (optionalFrom.isBetween(appointmentFrom, appointmentTo) && optionalTo.isBetween(appointmentFrom, appointmentTo)) return isBusyHours; }); return !check; }); console.table(availableHours); console.log(availableHours);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

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!