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

176
Views
Cómo filtrar una matriz de objetos en la fecha

Tengo una serie de objetos que necesito filtrar y devolver solo los objetos más cercanos a la actualidad. El problema que tengo es que regresa la fecha de junio y no la de mayo. aquí está el código que estoy usando:

 const findClosest = (data, accessor, target = Date.now()) => data.reduce((prev, curr) => { const a = Math.abs(accessor(curr).getTime() - target); const b = Math.abs(accessor(prev).getTime() - target); return a - b < 0 ? curr : prev; }); const getClosestFromDate = (array, key, date) => { let arr = array.filter((e) => e[key] == date); return arr; }; const sampleData = [{ "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "is_swappable": true, "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-07-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "next_charge_scheduled_at": "2022-07-23T00:00:00", "order_day_of_month": null, }, ]; const processDateString = (dateString) => { let date = new Date(dateString); let year = date.getFullYear(); let month = date.getMonth(); console.log(date.toString()); return new Date(year, month + 1, date); }; const closest = findClosest(sampleData, ({ next_charge_scheduled_at }) => processDateString(next_charge_scheduled_at), "2022-05-10T03:03:42"); console.log(closest.next_charge_scheduled_at); console.log(getClosestFromDate(sampleData, "next_charge_scheduled_at", closest.next_charge_scheduled_at));

Obtuve este código de una de las otras preguntas, pero por alguna razón, incluso después de intentar varias veces sumar o restar de la variable del mes, no puedo devolver la fecha correcta. Realmente agradecería ayuda en esto.

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

0

Te estabas haciendo la vida demasiado difícil:

(Revisé mi respuesta después de leer el último comentario de OP).

La const acc es una function(obj) que tomará la propiedad next_charge_scheduled_at del obj , la convertirá en un objeto de date y luego devolverá su valor .getTime() .

findClosest(sampleData,acc) devuelve un solo objeto de la matriz sampleData dada más cercana a la hora de destino ( Date.now() ). Luego almaceno el valor .getTime() de este elemento en la constante closest y lo uso nuevamente para filtrar a través de la matriz de entrada original:

 const sampleData = [{ "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "is_swappable": true, "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-06-23T00:00:00", }, { "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-07-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "max_retries_reached": 0, "next_charge_scheduled_at": "2022-05-23T00:00:00", "order_day_of_month": null, }, { "next_charge_scheduled_at": "2022-07-23T00:00:00", "order_day_of_month": null, }, ]; const findClosest = (data, accessor, target = Date.now()) => data.reduce((prev, curr) => { const a = Math.abs(accessor(curr) - target); const b = Math.abs(accessor(prev) - target); return a - b < 0 ? curr : prev; }), acc=obj=>new Date(obj.next_charge_scheduled_at).getTime(), closest=acc(findClosest(sampleData,acc)); console.log(sampleData.filter(d=>acc(d)===closest));

La siguiente versión es aún más corta y evita el cálculo repetido de objetos de Date :

 function getClosest(arr){ const trg=Date.now() times=sampleData.map((d,i)=>[new Date(d.next_charge_scheduled_at).getTime(),i]), closest=times.reduce((p,c) => Math.abs(c[0]-trg) < Math.abs(p[0]-trg) ? c : p)[0]; return times.reduce((a,[t,i])=>(t==closest&&a.push(arr[i]),a),[]); }

getClosest() usa una matriz temporal times para almacenar el valor .getTime() calculado y el índice i para cada objeto. Después de encontrar el tiempo más cercano a Date.now() , la matriz de times es -reduce() d para compilar los resultados de la matriz de entrada original arr .

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!