Как научиться делать сортировки любой сложности в JavaScript?

Собственно, затык с сортировками данных.
Специального образования нет, возможно здесь и пробел.
Часто приходиться сталкиваться с сортировками массива объектов различной вложенности (в т.ч. иммутебельные структуры даных типа Map, List из Immutable.js).
Как работают map(), sort(), reduce(), в целом понятно, но очень тяжело применять их эффективно вживую.
Есть какое-то универсальное решение на эту тему?
Возможно, стоит почитать какой-то учебник по алгоритмам и структурам данных или пройти курс с задачками на применение данных методов.
Заранее спасибо.
  • Вопрос задан
  • 3674 просмотра
Пригласить эксперта
Ответы на вопрос 7
deksden
@deksden
Enterpreneur
Маленький совет. Вместо сортировки большой структуры данных (типа массива объектов) можно сделать и сортировать вспомогательный массив индексов. В начальном состоянии массив состоит из элементов 0,1,2,3,... - по числу элементов оригинального массива. В ходе сортировки сортируются не оригинальный массив, а вспомогательный - но операторы сравнения используют оригинальный массив.

В чем профит? Меньше перемешивается память добавлением или удалением элементов массива.
Ответ написан
@click_f
There is an excellent course on coursera described by the following link . Also this author has a nice book for.
Ответ написан
ZloyHobbit
@ZloyHobbit
Если вас интересуют именно сортировки, то я зык не важен, надо изучать алгоритмы.
www.ozon.ru/context/detail/id/6290126 - одна из лучших книг для начала, на мой взгляд. Гораздо меньше и проще Кнута, или Кормена. Ну и советов с книгами по алгоритмам на Тостере хватает.

Ну и надо отличать сортировки и обходы. Методы типа map и reduce вызывают некоторую функцию для каждого элемента массива. Они просто проходят по нему, без сравнений.
sort - сортирует массив, тоесть сравнивает элементы между собой и переставляет. Сложность такого алгоритма обычно гораздо выше, чем при простом проходе, а сравнение можно проводить различными способами, и это можно регулировать, передавая функцию сравнения arr.sort(function). Но эта функция будет только менять принцип сравнения двух элементов массива, а не алгоритм сортировки, который отвечает за порядок сравнения и перестановки. Передавая кастомную функцию, мы можем, к примеру отсортировать числа по алфавиту, или в обратном порядке, при помощи того же самого алгоритма сортировки.
Ну а если надо реализовывать свой алгоритм, то надо писать свой метод сортировки =)
Ответ написан
Kleindberg
@Kleindberg
Дизайнер
От себя могу только добавить, на днях нашел очень интересный ресурс - Rosettacode. Это некая википедия, там есть целый раздел о сортировке с примерами кода на различных языках.
Ответ написан
iCoderXXI
@iCoderXXI
React.JS/FrontEnd developer
Попробуй посмотреть в сторону Lodash/Underscore, там есть масса оптимизированных методов для, в т.ч., и сортировок по нескольким полям в разных направлениях.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы