Урок 16. Практика на пользовательские функции в JavaScript
Теория
Функция inArray
Задача
Реализовать функцию inArray, которая будет проверять, есть ли в массиве элемент с таким значением или нет. 1-м параметром функция должна принимать значение, а 2-м - массив. Если такой элемент есть - функция должна вернуть true, а если нет - false.
Решение:
function inArray(value,a){for(i=0;i<a.length;i++){if(a[i]==value){return true}}return false};a=[1,2,3];document.write(inArray(3,a))//Выведет true
function inArray(value,a){for(i=0;i<a.length;i++){if(a[i]==value){return true}}return false};a=[1,2,3];document.write(inArray(8,a))
Простые числа
Задача
Реализовать функцию isSimple, которая параметром будет принимать число и проверять, простое оно или нет. Если число простое, функция должна вернуть true, в противном случае - false.
Решение:
Самый простой способ проверить число на простоту - попробовать поделить его на все числа от 2 до самого числа (на само число не делить). Если ни на 1 из этих чисел число не делится, - оно простое, если хотя бы на 1 делится, вернуть false и выйти из функции:
function isSimple(n){for(i=2;i<n;i++){if(n%i==0){return false}}return true}document.write(isSimple(17))//Выведет true
function isSimple(n){for(i=2;i<n;i++){if(n%i==0){return false}}return true}document.write(isSimple(8))
Делители
Задача
Реализовать функцию getDivisors, которая параметром будет принимать число и возвращать массив его делителей, т.е. чисел, на которое делится число. К примеру, если передается число 24, должен получиться массив [1,2,3,4,6,12,24].
Решение:
function getDivisors(n){var r=[];for(i=1;i<=n;i++){if(n%i==0){r.push(n)}}return r}document.write(getDivisors(24))//Выведет [1,2,3,4,6,12,24]
Проверь!
Пересечение массивов
Задача
Реализовать функцию getIntersection, которая параметрами будет принимать 2 массива и возвращать массив из элементов, которые есть и в 1, и во 2-м массиве (это называется пересечение массивов). К примеру, getIntersection([1,2,3],[2,3,4]) должно вернуть [2,3].
Решение:
Перебор 1 из переданных массивов (не имеет значения какой) с помощью цикла. В цикле используем функцию inArray, которая разработана выше. С ее помощью проверим, есть ли текущий элемент 1 массива во 2-м. Если есть, записываем его в массив с результатом. Вот решение:
function getIntersection(a1,a2){r=[];for(i=0;i<a1.length;i++){if(inArray(a1[i],a2)){r.push(a1[i])}}return r}document.write(getIntersection([1,2,3],[2,3,4]))//Выведет [2,3]
Проверь!
НОД
Задача
Реализовать функцию getGreatestCommonDivisor, которая параметрами будет принимать 2 числа и возвращать наибольший общий делитель (НОД) этих 2 чисел. К примеру, для чисел 12 и 18 НОД равен 6.
Решение:
Используются разработанные функции. С помощью getDivisors находится массив делителей 1 и 2-го числа, а с помощью getIntersection получается массив общих делителей. Остается просто взять максимальный из общих делителей и получить результат:
function getGreatestCommonDivisor(n1,n2){divisors=getIntersection(getDivisors(n1),getDivisors(n2));/*['2','3','6']*/return Number(Max.apply(null,divisors))}document.write(getGreatestCommonDivisors(12,18))//Выведет 6
Практика
Дана строка. Сделать заглавным 1-й символ каждого слова этой строки. Для этого сделать вспомогательную функцию ucfirst, которая будет получать строку, делать 1-й символ этой строки заглавным и возвращать обратно строку с заглавной 1-й буквой.
Дана строка вида 'var_text_hello'. Сделать из него текст 'varTextHello'.
Сделать функцию inArray, которая определяет, есть в массиве элемент с заданным текстом или нет. Функция 1-м параметром должна принимать текст элемента, а 2-м - массив, в котором делается поиск. Функция должна возвращать true или false.
Дана строка, например, '123456'. Сделать из нее '214365'.