He usado una pequeña función para concatenar dos matrices y eliminar los duplicados:
let a = ['06.12.2021', '07.12.2021', '19.12.2021', '20.12.2021', '01.03.2022', '03.03.2022', '06.12.2021', '09.01.2022']; let b = ['17.11.2021', '04.01.2022', '08.01.2022', '09.01.2022']; let ab = [...new Set( a.concat( b ) )]; console.log(ab);Esto funciona bastante bien, pero en realidad están en un orden completamente malo. Al menos, deben comenzar con la fecha más baja y terminar con la más alta. He intentado una función de clasificación sin ningún éxito:
let a = ['06.12.2021', '07.12.2021', '19.12.2021', '20.12.2021', '01.03.2022', '03.03.2022', '06.12.2021', '09.01.2022']; let b = ['17.11.2021', '04.01.2022', '08.01.2022', '09.01.2022']; let ab = [...new Set(a.concat(b))]; console.log(ab); ab.sort((a, b) => Date.parse(b) - Date.parse(a)); console.log(ab);¿Tiene algún consejo para mí?
Esto sucede porque algunas de las fechas no se pueden analizar en su formato actual y, por lo tanto, no se pueden colocar en el orden correcto. Para probar esto usted mismo, intente:
let a = ['06.12.2021', '07.12.2021', '19.12.2021', '20.12.2021', '01.03.2022', '03.03.2022', '06.12.2021', '09.01.2022']; let b = ['17.11.2021', '04.01.2022', '08.01.2022', '09.01.2022']; let ab = [...new Set(a.concat(b))]; let test = ab.map(m => new Date(m)) console.log(test);Esto se debe a que las fechas de JavaScript no están equipadas para manejar fechas con formato DD.MM.YYYY. Si no le importa usar una biblioteca, algo como DateJs puede ayudar
Agregué una función de parse personalizada que analiza fechas explícitamente formateadas como DD.MM.YYYY en objetos de Date . Esto soluciona el problema de análisis de fecha. También cambié b - a a a - b que se ordena en orden creciente.
let a = ['06.12.2021', '07.12.2021', '19.12.2021', '20.12.2021', '01.03.2022', '03.03.2022', '06.12.2021', '09.01.2022']; let b = ['17.11.2021', '04.01.2022', '08.01.2022', '09.01.2022']; let ab = [...new Set(a.concat(b))]; console.log(ab); function parse(date) { const [d, m, y] = date.split('.'); return new Date(y, m-1, d); } ab.sort((a, b) => parse(a) - parse(b)); console.log(ab);Con split() y sort() puedes archivar esto:
const a = ['06.12.2021', '07.12.2021', '19.12.2021', '20.12.2021', '01.03.2022', '03.03.2022', '06.12.2021', '09.01.2022']; const b = ['17.11.2021', '04.01.2022', '08.01.2022', '09.01.2022']; const ab = [...new Set( a.concat( b ) )]; const newDates = ab.sort(function(a,b){ return new Date(b.date) - new Date(a.date); }).map(e => { const a = e.split("."); return a[2] + "." + a[1] + "." + a[0] }).sort().map(e => { const a = e.split("."); return a[2] + "." + a[1] + "." + a[0] }) console.log('newDates',newDates)