#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. Метод сравнения строк — намного лучшая идея. 😉