Методы массивов: map, sort
JavaScript простым языком
Last updated
Was this helpful?
JavaScript простым языком
Last updated
Was this helpful?
Метод map
создает новый массив из элементов, которые будут являться результатами выполнения callback-функции.
У метода map
имеется только один аргумент, который является callback-функцией. У этой функции имеется 3 аргумента
, по аналогии с методами описанными ранее:
Первый аргумент – текущей элемент (элемент на текущей итерации).
Второй аргумент – индекс этого элемента в массиве.
Третий аргумент – сам массив.
Повторюсь, callback-функция может быть как обычной (function declaration
), так и стрелочной (arrow function
).
Пример использования:
Из исходного массива numbers
, с помощью метода map
мы создали новый массив, в котором каждое число было возведено в 5-ю степень
.
Метод sort
, как несложно догадаться по названию – сортирует массив. При этом, сортирует он его на месте, что означает изменение исходного массива. Плюсом к этому, данный метод еще и возвращает тот же самый массив, т.е. результат выполнения данного метода можно ещё и в другую переменную запихнуть (но это делается крайне редко).
Самый простой пример, который можно придумать, отсортировать числа, например, по возрастанию, но мы начнем не с них, а с буковок:
Как видишь, метод расположил буквы в соответствии с их расположением в латинском алфавите. Но что же будет, если применить метод sort
к массиву с числами? Глянем:
И казалось бы, что может пойти не так?! Но, всмотрись внимательно и увидишь, что значение 300
заняло далеко не своё место в этом танце =) Почему так? ПотомуШТА =). А если серьезно, то случилось это по той причине, что метод sort
по умолчанию при работе с элементами массива преобразует их (элементы) к строковому типу
и для сортировки применяется лексикографический порядок. А если сравнивать строки, то строка 300
будет больше чем строка 4
. Чтобы такой чепухи не было, нам нужно задать свой порядок сортировки.
Ты же заметил, что мы не передавали никакого аргумента в метод sort
, а они у него есть. И да, это снова callback-функция. Если ты ее передашь, то она будет (должна) задавать правила сортировки для массива.
Главное правило callback-функции для данного метода – для пары значений она должна возвращать:
1
(или любое положительное число) – если первое значение больше второго;
0
– если значения равны;
-1
(или любое отрицательное число) – если первое значение меньше второго.
Теперь подкрепим понимание кодом:
Вот оно, чудо из всех чудес! Теперь сортировка отработала совершенно правильно.
Что же мы поменяли? Да в целом, ничего. Мы создали функцию, в которой описали при каких условиях и что возвращать, используя правило выше. И эту функцию мы передали в аргумент метода. И все заработало как часы.
Конкретно данный случай можно еще и упростить, если использовать стрелочную функцию
и немного включить логику. Смотри:
Воу! Код колоссально сократился, но чего же мы такого тут поменяли?
Во-первых, мы ввели стрелочную функцию
, что автоматически в львиной доле случаев делает код короче.
Во-вторых, посмотри на эту функцию: (a, b) => a - b
. Здесь так же фигурируют a
и b
, как и в примере выше и мы возвращаем их разницу. Зачем?
Ты не забыл о главном правиле? Функция должна вернуть 1
(или любое положительное число), 0
или -1
(или любое отрицательное число).
Именно это здесь и вернется. Если числа будут равны, то результат a - b
даст нам значение 0
. Если a > b
, то нам вернется положительное число, если a < b
, то вернётся отрицательное число. Таким образом, правило у нас исполнится и метод отработает как нужно.