Выбрать главу

Подробнее об аргументах функций обратных вызовов

Для методов map и filter в наших функциях обратных вызовов мы определяли только один аргумент, представляющий текущий элемент массива. Для метода reduce мы определяли два аргумента, представлявших итоговое значение и текущий элемент. Помимо этого, функции обратных вызовов имеют два опциональных аргумента, которые вы также можете определить:

• индекс текущего элемента массива;

• массив, для которого вызывается map, filter или reduce.

Для методов map и filter эти аргументы стали бы вторым и третьим. Для reduce они бы оказались третьим и четвертым. Вы можете никогда не столкнуться с необходимостью определять эти опциональные аргументы, но если они все же вам понадобятся, знайте, где их искать.

Мы почти закончили. Давайте взглянем на пример, где показана работа метода reduce с нечисленными значениями:

let words = ["Where", "do", "you", "want", "to", "go", "today?"];

let phrase = words.reduce(function (total, current, index) {

if (index == 0) {

return current;

} else {

return total + " " + current;

}

}, "");

console.log(phrase);

Здесь совмещается текстовое содержимое массива words (слов), чтобы создать значение, которое будет выглядеть как Where do you want to go today? (Куда ты хочешь пойти сегодня?) Обратите внимание, что происходит в функции обратного вызова. Помимо совмещения каждого элемента в одну фразу мы определяем опциональный третий аргумент, представляющий индекс нашего текущего элемента. Мы используем этот индекс для отдельного случая с первым словом, чтобы определить, нужен перед ним пробел или нет.

Экскурс в функциональное программирование

Как показали последние несколько разделов, методы map, filter и reduce существенно упрощают работу с массивами. Но они проявляют себя и еще в одной огромной области, которая известна как функциональное программирование. Функциональное программирование — это способ написания кода, где вы используете функции, которые:

• могут работать внутри других функций;

• избегают совместного использования и изменения состояния;

• возвращают один и тот же вывод для одного и того же ввода.

Есть и другие мелочи, которые можно было бы здесь перечислить, но для начала хватит и этого. Вы уже видели работу принципов функционального программирования в функциях обратных вызовов. Эти функции идеально подходят под три перечисленных критерия, поскольку могут быть добавлены в любую ситуацию или исключены из нее до тех пор, пока аргументы будут работать. Они не изменяют никакое состояние и полноценно работают внутри методов map, filter и reduce. Функциональное программирование — это занятная тема, требующая гораздо более тщательного рассмотрения. Поэтому пока оставим все как есть, а подробным изучением этой темы займемся позднее.

КОРОТКО О ГЛАВНОМ

Пожалуй, это все, что следует знать про массивы, так как именно для этого вы их и будете использовать чаще всего. По крайней мере, теперь вы точно сможете создать с их помощью список продуктов.

Дополнительные ресурсы и примеры:

• Перемешивание массива: http://bit.ly/kirupaArrayShuffle

• Выбор произвольного элемента массива: http://bit.ly/kirupaRandomItemArray

• Удаление повторов из массива: http://bit.ly/kirupaRemoveDuplicates

• Хеш-таблицы против массивов: href="http://bit.ly/kirupaHvA

Глава 14. Строки

Будучи людьми, мы постоянно взаимодействуем со словами — произносим, пишем и также прибегаем к их использованию при написании программ. Так уж вышло, что JavaScript тоже привязан к словам. Буквы и всяческие символы, составляющие наш с вами язык, имеют в JS свое официальное имя — строки. Строки в JavaScript — не что иное, как наборы знаков. Несмотря на то что звучит это занудно, умение обращаться к этим знакам и манипулировать ими является необходимым навыком. Этому и будет посвящен этот урок.

Поехали!

Основы

Работать со строками в коде легко. При этом нам просто нужно заключать их в одинарные или двойные кавычки. Вот некоторые примеры:

let text = "this is some text";

let moreText = 'I am in single quotes!';

console.log("this is some more text");

Помимо простого перечисления строк мы нередко будем их совмещать. Это легко делается с помощью оператора +: