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;
}