Сортировка большого набора данных массива по дате и времени с помощью Java script

#javascript #arrays #sorting #datetime

#javascript #массивы #сортировка #дата и время

Вопрос:

Имейте большой список массивов данных, число которых может превышать N. Необходимо отсортировать элементы массива по последней дате и времени. введите описание изображения здесь

 let array = [{"name": "Apple","modified_date": "2020-08-26 02:03:23.756"},
             {"name": "Orange","modified_date": "2020-08-26 03:03:23.756"},
             {"name": "Grapes","modified_date": "2020-08-26 04:03:23.756"}................N number length]
  

возможность сортировки с использованием небольшого размера массива

 let sort = array.sort(function(a, b) { 
            return (new Date(b.modified_date)).getTime() - (new Date(a.modified_date)).getTime();
        });
  

Но с массивом большой длины правильная сортировка не происходит.В чем может быть проблема!!!!?

Комментарии:

1. Что вы подразумеваете под «сортировка не происходит»?

2. Плюс 542 не такой большой , честно говоря, вы можете немного зависнуть при обработке более 1 млн записей, и в этом случае вы можете продолжить работу в web worker (это не сократит время сортировки, но позволит пользовательскому интерфейсу не зависать).

3. @Nick Я имею в виду, что правильная сортировка не происходит среди всех N элементов массива.

4. @New123 Вероятно, необходим конкретный ввод..

5. Я опубликовал и отвечаю, но это помогло бы только в том случае, если бы ваша функция сортировки не завершилась (в отличие от неправильной сортировки). Нет необходимости создавать Date() объект. Сравнение строк должно дать вам тот же результат здесь.

Ответ №1:

Вы могли бы избежать создания O(2*n*log(n)) Date объектов. Сравнение строк даст тот же результат, что и Date(str).getTime() сравнение результатов. Метод сравнения строк — намного лучшая идея.

 let array = [{"name": "Apple","modified_date": "2020-08-26 02:03:23.756"},
             {"name": "Orange","modified_date": "2020-08-26 03:03:23.756"},
             {"name": "Grapes","modified_date": "2020-08-26 04:03:23.756"}];

array.sort((a, b) => b.modified_date.localeCompare(a.modified_date));
console.log(array);  

Комментарии:

1. На самом деле результаты будут другими, поскольку в некоторых браузерах new Date("2020-08-26 02:03:23.756").getTime() возвращается NaN. Метод сравнения строк — намного лучшая идея. 😉