Подробнее об аргументах функций обратных вызовов
Для методов 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");
Помимо простого перечисления строк мы нередко будем их совмещать. Это легко делается с помощью оператора +: