Tengo una variedad de cadenas
const array = [ ' | 7/9, 5:00 AM', ' | 7/10, 5:00 AM', ' | 7/10, 11:00 PM', ' | 7/13, 2:30 AM' ]y escribió una función
function validateScheduledGamesOrder(arrayWithAiringTimes) { if (arrayWithAiringTimes.length === 1) { return true; } for (let i = 0; i < arrayWithAiringTimes.length - 1; i++) { if (arrayWithAiringTimes[i] > arrayWithAiringTimes[i + 1]) { return true; } else { return false; } } }Pero no estoy seguro de que esa sea la solución correcta. ¿Cómo puedo comprobar que está ordenado correctamente por orden alfabético o por fecha? No necesito ordenarlo, solo necesito validar que el orden es correcto
La parte difícil será analizar las fechas. Una vez que tenga eso en su lugar, su función para verificar un orden ascendente estará bien. Aunque también debe permitir que dos valores consecutivos sean iguales (ya que todavía está "ordenado").
El formato de fecha que tiene allí es bastante inusual, y sería mejor usar un formato estándar (ISO). Si eso realmente no es posible, entonces necesita escribir un pequeño analizador. Aquí hay uno que simplemente extrae los números y la letra "A" o "P" cerca del final, y crea un objeto de fecha a partir de eso:
function parseDate(s) { const [month, day, hour, min, merid] = s.match(/\d+|[AP]/g); return new Date(2020, month - 1, day, (merid == "P") * 12 + (hour % 12), min); }Este analizador no realizará ninguna validación de entrada; asume que la cadena proporcionada tiene el formato esperado. Toma un año bisiesto como año, por lo que puede aceptar 2/29.
La función para probar si una matriz está ordenada, se puede escribir así:
const isNonDecreasing = array => array.every((val, i) => !i || val >= array[i-1]);Combinando esto, puedes tener:
function parseDate(s) { const [month, day, hour, min, merid] = s.match(/\d+|[AP]/g); return new Date(2020, month - 1, day, (merid == "P") * 12 + (hour % 12), min); } const isNonDecreasing = array => array.every((val, i) => !i || val >= array[i-1]); // Example run const array = [ ' | 7/9, 12:00 AM', ' | 7/10, 5:00 AM', ' | 7/10, 11:00 PM', ' | 7/13, 12:00 AM', ' | 7/13, 2:30 AM', ' | 7/13, 11:00 AM', ' | 7/13, 12:00 PM', ' | 7/13, 1:00 PM', ]; console.log("Is sorted alphabetically?", isNonDecreasing(array)); console.log("Is sorted by date?", isNonDecreasing(array.map(parseDate)));