JavaScript · Синтаксис · Початковий рівень
Set, об'єкти, обробка помилок
Практика JavaScript з Set, об'єктами та обробкою помилок: унікальні значення, загальні символи, try/catch, безпечне оброблення даних, групування слів та аналіз рядків.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Патерни об'єктів — групування і фільтрація
#Обробка помилок за допомогою try/catch
#Вправи:
Унікальні додатні значення.
#Напишіть функцію, яка приймає масив чисел і повертає Set унікальних додатних значень.
function uniquePositive(nums) {
// ваш код тут
}
Рішення
function uniquePositive(nums) {
let result = new Set([]);
for (let n of nums) {
if (n > 0) {
result.add(n);
}
}
return result;
}
// або так можна: перевірку на додатність зробити перед додаванням у Set
let numbers = [1, -2, 3, 1, 0, 3, 5];
let result = new Set();
for (let n of numbers) {
if (n > 0) {
result.add(n);
}
}
console.log(result);
Спільні символи двох рядків.
#Напишіть функцію, яка приймає два рядки і повертає Set спільних символів.
function commonChars(a, b) {
// ваш код тут
}
Рішення
function commonChars(a, b) {
return new Set([...a].filter(char => new Set(b).has(char)));
}
Середня ціна товарів.
#Напишіть функцію, яка приймає об’єкт із цінами товарів і повертає середню ціну. Якщо об’єкт порожній — поверніть 0.
function averagePrice(prices) {
// ваш код тут
}
Рішення
function averagePrice(prices) {
const values = Object.values(prices);
if (values.length === 0) {
return 0;
}
let total = 0;
for (let price of values) {
total += price;
}
return total / values.length;
}
Сума чисел із рядка.
#Напишіть функцію, яка приймає рядок із числами, розділеними пробілами, і повертає суму цих чисел. Якщо зустрічається не число — пропускайте його.
function safeSum(text) {
// ваш код тут
}
Рішення
function safeSum(text) {
let total = 0;
for (let part of text.trim().split(/\s+/)) {
const value = Number(part);
if (!Number.isNaN(value)) {
total += value;
}
}
return total;
}
Групування за першою літерою.
#Напишіть функцію, яка приймає масив слів і повертає об’єкт, де: - ключ — перша літера слова - значення — кількість слів, що починаються з цієї літери
function firstLetterStats(words) {
// ваш код тут
}
Рішення
function firstLetterStats(words) {
let result = {};
for (let w of words) {
if (!w) {
continue;
}
let key = w[0];
if (key in result) {
result[key] += 1;
} else {
result[key] = 1;
}
}
return result;
}
Перетин і різниця Set.
#Напишіть функцію, яка приймає два Set і повертає: - їхній перетин - їхню різницю (перший мінус другий)
function setOperations(a, b) {
// ваш код тут
}
Рішення
function setOperations(a, b) {
return {
intersection: new Set(
[...a].filter(value => b.has(value))
),
difference: new Set(
[...a].filter(value => !b.has(value))
),
};
}
Фільтр старших за 18.
#Напишіть функцію, яка приймає об’єкт {ім’я: вік} і повертає об’єкт лише з тими, хто старший за 18.
function adultsOnly(data) {
// ваш код тут
}
Рішення
function adultsOnly(data) {
let result = {};
for (const [name, age] of Object.entries(data)) {
if (age > 18) {
result[name] = age;
}
}
return result;
}
Множина типів значень.
#Напишіть функцію, яка приймає масив значень і повертає Set їхніх типів.
function valueTypes(values) {
// ваш код тут
}
Рішення
function valueTypes(values) {
let result = new Set();
for (let v of values) {
result.add(typeof v);
}
return result;
}
Найкращий учень за балами.
#Напишіть функцію, яка приймає об’єкт із балами учнів і повертає ім’я учня з максимальним балом. Якщо об’єкт порожній — поверніть null.
function bestStudent(scores) {
// ваш код тут
}
Рішення
function bestStudent(scores) {
if (Object.keys(scores).length === 0) {
return null;
}
let best = null;
let maxScore = -1;
for (const [name, score] of Object.entries(scores)) {
if (score > maxScore) {
maxScore = score;
best = name;
}
}
return best;
}
Підрахунок слів.
#Напишіть функцію, яка приймає рядок і повертає об’єкт із кількістю кожного слова.
function wordFrequency(text) {
// ваш код тут
}
Рішення
function wordFrequency(text) {
const result = {};
for (let word of text.trim().split(/\s+/)) {
if (!word) continue;
word = word.toLowerCase();
if (word in result) {
result[word] += 1;
} else {
result[word] = 1;
}
}
return result;
}
Парні та непарні в об’єкті.
#Напишіть функцію, яка приймає масив чисел і повертає об’єкт: - "even" — кількість парних - "odd" — кількість непарних
function evenOddStats(nums) {
// ваш код тут
}
Рішення
function evenOddStats(nums) {
let result = {"even": 0, "odd": 0};
for (let n of nums) {
if (n % 2 === 0) {
result["even"] += 1;
} else {
result["odd"] += 1;
}
}
return result;
}
Видалення значень null.
#Напишіть функцію, яка приймає об’єкт і повертає новий об’єкт без пар, де значення дорівнює null.
function removeNulls(d) {
// ваш код тут
}
Рішення
function removeNulls(d) {
let result = {};
for (const [k, v] of Object.entries(d)) {
if (v !== null) {
result[k] = v;
}
}
return result;
}
// або так можна: створити новий об’єкт, не змінюючи початковий
let data = {a: 1, b: null, c: 3};
let result = {};
for (let key in data) {
if (data[key] !== null) {
result[key] = data[key];
}
}
console.log(result);
Унікальні слова з рядків.
#Напишіть функцію, яка приймає масив рядків і повертає Set усіх унікальних слів.
function uniqueWords(lines) {
// ваш код тут
}
Рішення
function uniqueWords(lines) {
const result = new Set();
for (let line of lines) {
for (let word of line.trim().split(/\s+/)) {
if (word) {
result.add(word.toLowerCase());
}
}
}
return result;
}
Цифри, літери та інші символи.
#Напишіть функцію, яка приймає рядок і повертає об’єкт: - "digits" — кількість цифр - "letters" — кількість літер - "others" — кількість інших символів
function charStats(text) {
// ваш код тут
}
Рішення
function charStats(text) {
let result = {"digits": 0, "letters": 0, "others": 0};
for (let ch of text) {
if (/^\d$/.test(ch)) {
result["digits"] += 1;
} else if (/^\p{L}$/u.test(ch)) {
result["letters"] += 1;
} else {
result["others"] += 1;
}
}
return result;
}
Set слів за довжиною.
#Напишіть функцію, яка приймає масив слів і повертає об’єкт, де: - ключ — довжина слова - значення — Set слів такої довжини
function groupByLength(words) {
// ваш код тут
}
Рішення
function groupByLength(words) {
let result = {};
for (let w of words) {
let l = w.length;
if (!(l in result)) {
result[l] = new Set();
}
result[l].add(w);
}
return result;
}