JavaScript · Синтаксис · Початковий рівень

Функції рівень 3

15 завдань

Вправи щодо функцій JavaScript рівня 3: функції з режимами роботи, прапорами, кількома умовами, обробкою рядків, масивів та чисел для розвитку алгоритмічного мислення.

Параметри, що керують поведінкою

#
Ці завдання знайомлять із патерном, що постійно зустрічається в реальному коді: параметр, що керує тим, що функція робить, а не тим, над чим вона працює. Найпоширеніші форми — рядок-режим і булевий прапор. Рядок-режим — одне з невеликого набору літеральних значень, як-от "add", "sub", "sum", "product". Функція розгалужується за ним: ```javascript function calculate(a, b, operation) { if (operation === "add") { return a + b; } else if (operation === "sub") { return a - b; } } ``` Булевий прапор перемикає між двома варіантами поведінки: ```javascript function formatText(text, upper) { if (upper) { return text.toUpperCase(); } else { return text.toLowerCase(); } } ``` Ключовий момент: дані (текст, числа) і поведінка (що з ними робити) — обидва є входами функції. Це робить функцію гнучкою без необхідності писати окрему для кожної комбінації. Поширена помилка — трактувати прапор як рядок: if (upper === true) більш крихке, ніж if (upper), а if (upper === "true") завжди буде false, коли upper — справжній булевий тип. Булеві параметри вже є true або false — використовуйте їх безпосередньо.

Патерни режимів і прапорів

#
Більшість завдань тут поєднують режим або прапор із коротким обчисленням. Блок if/else if — це вся функція: ```javascript function scaleNumber(n, mode) { if (mode === "double") { return n * 2; } else if (mode === "triple") { return n * 3; } } function combineNumbers(numbers, mode) { if (mode === "sum") { let total = 0; for (const n of numbers) total += n; return total; } else if (mode === "product") { let result = 1; for (const n of numbers) result *= n; return result; } } ``` Для операцій над масивом режим вибирає обчислення — але обидві гілки використовують однакову структуру ітерації. Булеві прапори з двома симетричними варіантами поведінки: ```javascript function pickNumber(a, b, getMax) { if (getMax) { return a >= b ? a : b; } else { return a <= b ? a : b; } } ``` condition ? a : b — тернарний оператор JavaScript. Еквівалент блоку if/else, але вміщується в один вираз. Використовуйте його, коли обидві гілки короткі. Коли одна гілка просто повертає незмінений вхід: ```javascript function maybeAbs(n, useAbs) { if (useAbs) { return Math.abs(n); } return n; } ``` else не потрібен, коли один шлях закінчується на return — голий return в кінці обробляє інший випадок.
01

Режим double або triple.

#

Напишіть функцію, яка приймає число та рядок-режим: "double" або "triple". Якщо режим "double" — повернути число, помножене на 2, якщо "triple" — помножене на 3.

function scaleNumber(n, mode) {
    // ваш код тут
}
Рішення
function scaleNumber(n, mode) {
    if (mode === "double") {
        return n * 2;
    } else if (mode === "triple") {
        return n * 3;
    } else {
        return n;
    }
}
02

Прапорець верхнього регістру.

#

Напишіть функцію, яка приймає рядок і логічне значення. Якщо прапорець upper дорівнює true — повернути рядок у верхньому регістрі, інакше — у нижньому.

function formatText(text, upper) {
    // ваш код тут
}
Рішення
function formatText(text, upper) {
    if (upper) {
        return text.toUpperCase();
    } else {
        return text.toLowerCase();
    }
}
03

Операція add або sub.

#

Напишіть функцію, яка приймає два числа та рядок-операцію: "add" або "sub". Поверніть суму або різницю залежно від операції.

function calculate(a, b, operation) {
    // ваш код тут
}
Рішення
function calculate(a, b, operation) {
    if (operation === "add") {
        return a + b;
    } else if (operation === "sub") {
        return a - b;
    } else {
        return 0;
    }
}
04

Переворот за умовою.

#

Напишіть функцію, яка приймає рядок і число. Якщо число більше 5 — повернути рядок у зворотному порядку, інакше — повернути рядок без змін.

function conditionalReverse(text, limit) {
    // ваш код тут
}
Рішення
function conditionalReverse(text, limit) {
    if (limit > 5) {
        return text.split('').reverse().join('');
    } else {
        return text;
    }
}
05

Абсолютне значення за прапорцем.

#

Напишіть функцію, яка приймає число та прапорець. Якщо прапорець true — повернути абсолютне значення, якщо false — повернути число як є.

function maybeAbs(n, useAbs) {
    // ваш код тут
}
Рішення
function maybeAbs(n, useAbs) {
    if ((useAbs) && (n < 0)) {
        return -n;
    }
    return n;
}
06

Режим first або last.

#

Напишіть функцію, яка приймає рядок і режим: "first" або "last". Поверніть або перший символ рядка, або останній.

function pickChar(text, mode) {
    // ваш код тут
}
Рішення
function pickChar(text, mode) {
    if (text === "") {
        return "";
    }

    if (mode === "first") {
        return text[0];
    } else if (mode === "last") {
        return text[text.length - 1];
    } else {
        return "";
    }
}
07

Сума або добуток.

#

Напишіть функцію, яка приймає масив чисел і режим: "sum" або "product". Поверніть суму або добуток усіх елементів.

function combineNumbers(numbers, mode) {
    // ваш код тут
}
Рішення
function combineNumbers(numbers, mode) {
    if (mode === "sum") {
        let total = 0;

        for (let n of numbers) {
            total += n;
        }

        return total;

    } else if (mode === "product") {
        let result = 1;

        for (let n of numbers) {
            result *= n;
        }

        return result;

    } else {
        return 0;
    }
}
08

Видалення пробілів за прапорцем.

#

Напишіть функцію, яка приймає рядок і прапорець. Якщо прапорець true — видалити всі пробіли, якщо false — повернути рядок без змін.

function cleanSpaces(text, remove) {
    // ваш код тут
}
Рішення
function cleanSpaces(text, remove) {
    if (!(remove)) {
        return text;
    }
    let result = "";
    for (let ch of text) {
        if (ch !== " ") {
            result += ch;
        }
    }
    return result;
}
09

Режим even або odd.

#

Напишіть функцію, яка приймає число і режим: "even" або "odd". Поверніть true, якщо число відповідає режиму.

function checkParity(n, mode) {
    // ваш код тут
}
Рішення
function checkParity(n, mode) {
    if (mode === "even") {
        return n % 2 === 0;

    } else if (mode === "odd") {
        return n % 2 !== 0;

    } else {
        return false;
    }
}
10

Перші або останні 3 символи.

#

Напишіть функцію, яка приймає рядок і режим: "short" або "long". Якщо режим "short" — повернути перші 3 символи, якщо "long" — останні 3 символи.

function sliceText(text, mode) {
    // ваш код тут
}
Рішення
function sliceText(text, mode) {
    if (text.length < 3) {
        return text;
    }
    if (mode === "short") {
        return text.slice(0, 3);
    } else if (mode === "long") {
        return text.slice(-3);
    }
}
11

Більше або менше за прапорцем.

#

Напишіть функцію, яка приймає два числа і прапорець. Якщо прапорець true — повернути більше число, якщо false — менше.

function pickNumber(a, b, get_max) {
    // ваш код тут
}
Рішення
function pickNumber(a, b, getMax) {
    if (getMax) {
        return (a > b ? a : b);
    } else {
        return (a < b ? a : b);
    }
}
12

Count або length.

#

Напишіть функцію, яка приймає рядок і режим: "count" або "length". Якщо режим "count" — повернути кількість букв "a", якщо "length" — довжину рядка.

function analyzeText(text, mode) {
    // ваш код тут
}
Рішення
function analyzeText(text, mode) {
    if (mode === "length") {
        return text.length;
    } else if (mode === "count") {
        let cnt = 0;
        for (let ch of text.toLowerCase()) {
            if (ch === "a") {
                cnt += 1;
            }
        }
        return cnt;
    }
}
13

Квадрат або куб.

#

Напишіть функцію, яка приймає число і прапорець. Якщо прапорець true — повернути квадрат числа, якщо false — куб числа.

function powerByFlag(n, square) {
    // ваш код тут
}
Рішення
function powerByFlag(n, square) {
    if (square) {
        return n * n;
    } else {
        return n * n * n;
    }
}
14

Обрізка start або end.

#

Напишіть функцію, яка приймає рядок і режим: "start" або "end". Якщо "start" — повернути рядок без перших 2 символів, якщо "end" — без останніх 2.

function trimText(text, mode) {
    // ваш код тут
}
Рішення
function trimText(text, mode) {
    if (text.length <= 2) {
        return "";
    }
    if (mode === "start") {
        return text.slice(2);
    } else if (mode === "end") {
        return text.slice(0, -2);
    }
}
15

Sign або abs.

#

Напишіть функцію, яка приймає число і режим: "sign" або "abs". Якщо режим "sign" — повернути рядок "positive", "negative" або "zero", якщо "abs" — повернути абсолютне значення числа.

function numberInfo(n, mode) {
    // ваш код тут
}
Рішення
function numberInfo(n, mode) {
    if (mode === "abs") {
        return (n < 0 ? -n : n);

    } else if (mode === "sign") {
        if (n > 0) {
            return "positive";

        } else if (n < 0) {
            return "negative";

        } else {
            return "zero";
        }

    } else {
        return null;
    }
}