JavaScript · Синтаксис · Начальный уровень
Цикл for и массивы
Практика цикла for в JavaScript на массивах: перебор элементов, фильтрация значений, подсчёты, поиск минимума и максимума, работа со строками, датами и вложенными данными.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Построение массивов во время итерации
#Ключевые паттерны из задач
#Упражнения:
Числа через дефис.
#Дан массив чисел. Выведите каждое число из массива в той же строке в терминале через дефис. 3-7-1-9-4
let numbers = [3, 7, 1, 9, 4];
Решение
let numbers = [3, 7, 1, 9, 4];
let result = "";
for (let n of numbers) {
result += String(n) + "-";
}
result = result.slice(0, -1);
console.log(result);
// или самый короткий вариант через join
let numbers = [3, 7, 1, 9, 4];
let result = numbers.join("-");
console.log(result);
Чётные числа без нулей.
#Дан массив чисел. Добавьте в новый массив только чётные числа, нули пропустить.
let numbers = [2, 5, 0, 8, 11, 14, 17, 0]; let newItems = [];
Решение
let numbers = [2, 5, 0, 8, 11, 14, 17, 0];
let newItems = [];
for (let n of numbers) {
if ((n !== 0) && (n % 2 === 0)) {
newItems.push(n);
}
}
console.log(newItems);
// или так можно: сначала проверить ноль, а потом чётность
let numbers = [2, 5, 0, 8, 11, 14, 17, 0];
let result = [];
for (let n of numbers) {
if (n === 0) {
continue;
}
if (n % 2 === 0) {
result.push(n);
}
}
console.log(result);
Сумма элементов массива.
#Дан массив чисел. Найдите сумму всех элементов массива.
let numbers = [5, 10, 15, 20]; let total = 0;
Решение
let numbers = [5, 10, 15, 20];
let total = 0;
for (let n of numbers) {
total += n;
}
console.log("Сумма:", total);
// или так можно через reduce, когда этот метод уже знаком
let numbers = [5, 10, 15, 20];
let total = numbers.reduce((sum, n) => sum + n, 0);
console.log("Сумма:", total);
Непустые строки.
#Дан массив строк. Добавьте в новый массив строки, если они не пустые.
let words = ["0000-0000-0000-0000", "", "1111-1111-1111-1111", "2222-2222-2222-2222", ""]; let newWords = [];
Решение
let words = ["0000-0000-0000-0000", "", "1111-1111-1111-1111", "2222-2222-2222-2222", ""];
let newWords = [];
for (let w of words) {
if (w !== "") {
newWords.push(w);
}
}
console.log(newWords);
Квадраты чисел больше 10.
#Дан массив чисел. Создайте новый массив, в котором будут возведённые в квадрат только числа больше 10.
let numbers = [3, 12, 5, 18, 7, 25]; let result = [];
Решение
let numbers = [3, 12, 5, 18, 7, 25];
let result = [];
for (let n of numbers) {
if (n > 10) {
result.push(n ** 2);
}
}
console.log(result);
// или так можно: сначала сохранить квадрат в переменную
let numbers = [3, 12, 5, 18, 7, 25];
let result = [];
for (let n of numbers) {
if (n > 10) {
let square = n ** 2;
result.push(square);
}
}
console.log(result);
Дни недели с номерами.
#Дан массив с названиями дней недели. Выведите каждый день в формате: "День X: <название>" .
let days = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница"];
Решение
let days = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница"];
let dayNum = 1;
for (let day of days) {
console.log(`День ${dayNum}: ${day}`);
day_num += 1;
}
// или так можно через обычный индекс
let days = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница"];
for (let i = 0; i < days.length; i += 1) {
console.log(`День ${i + 1}: ${days[i]}`);
}
Максимум через цикл.
#Дан массив чисел. Найдите максимальное число в массиве, используя цикл for .
let numbers = [8, 3, 15, 6, 2]; let maxNum = numbers[0];
Решение
let numbers = [8, 3, 15, 6, 2];
let maxNum = numbers[0];
for (let n of numbers) {
if (n > maxNum) {
maxNum = n;
}
}
console.log("Максимум:", maxNum);
// или так можно:
let numbers = [8, 3, 15, 6, 2];
let maxNum = Math.max(...numbers);
console.log("Максимум:", maxNum);
Строки длиннее 5 символов.
#Дан массив строк. Подсчитайте, сколько строк длиннее 5 символов.
let words = ["javascript", "java", "go", "javascript", "c"]; let count = 0;
Решение
let words = ["javascript", "java", "go", "javascript", "c"];
let count = 0;
for (let w of words) {
if (w.length > 5) {
count += 1;
}
}
console.log("Количество строк:", count);
Положительные числа из массива.
#Дан массив чисел. Выведите только те числа, которые больше 0.
let numbers = [-3, 5, -1, 7, 0, -2];
Решение
let numbers = [-3, 5, -1, 7, 0, -2];
for (let n of numbers) {
if (n > 0) {
console.log(n);
}
}
Строка через запятую.
#Дан массив строк. Создайте строку, которая будет состоять из всех элементов массива, разделённых запятой и пробелом.
let words = ["JavaScript", "это", "круто"]; let result = "";
Решение
let words = ["JavaScript", "это", "круто"];
let result = "";
for (let w of words) {
result += w + ", ";
}
result = result.slice(0, -2);
console.log(result);
// или короче через join
let words = ["JavaScript", "это", "круто"];
let result = words.join(", ");
console.log(result);
Слова и их длина.
#А будьте так любезны 🧐, создать из этого массива строк новый массив, в котором элементами будут массивы. В каждом массиве два элемента: строка и ее длина например: words = ["JavaScript", "это", "круто"] new = [["JavaScript", 10], ["это", 3], ["круто", 5]]
let words = ["JavaScript", "это", "круто"]; let newItems = [];
Решение
let words = ["JavaScript", "это", "круто"];
let newItems = [];
for (let word of words) {
let t = [word, word.length];
newItems.push(t);
}
console.log(newItems);
// или так можно без промежуточной переменной
let words = ["JavaScript", "это", "круто"];
let result = [];
for (let word of words) {
result.push([word, word.length]);
}
console.log(result);
Символы строки в нижнем регистре.
#Хм... Срочно нужно сделать из этой строки "Этой", массив, который будет состоять из символов этой строки в нижнем регистре!!! (маленькие буковки)
let word = "Этой";
Решение
let word = "Этой";
let arr = Array.from(word.toLowerCase());
console.log(arr);
// или через цикл, чтобы явно увидеть добавление каждого символа
let word = "Этой";
let arr = [];
for (let char of word) {
arr.push(char.toLowerCase());
}
console.log(arr);
Номер карты через дефис.
#Опять же срочно! Какой-то умник сохранил номер банковской карты в виде массива по 4 цифры карты: card = ["1111", "2222", "3333", "4444"] Сделайте из этого строку в таком формате: norm_card = "1111-2222-3333-4444"
let card = ["1111", "2222", "3333", "4444"];
Решение
let card = ["1111", "2222", "3333", "4444"];
let normCard = card.join("-");
console.log(normCard);
// или так:
let card = ["1111", "2222", "3333", "4444"];
let normCard = "";
for (let part of card) {
normCard += part + "-";
}
normCard = normCard.slice(0, -1);
console.log(normCard);
Минимум, максимум и среднее.
#Продолжаем срочный квест! Найдите по быстрому: - минимальное значение в массиве; - максимальное значение в массиве; - сумму всех значений в массиве; - среднее арифметическое значений в массиве. А потом, по желанию, не по быстрому.
let arr = [10, 100, 500, 11, 18, 99, -3, 101];
Решение
// по быстрому
let numbers = [5, 2, 9, 1, 7];
let minNum = Math.min(...numbers);
let maxNum = Math.max(...numbers);
let total = numbers.reduce((sum, n) => sum + n, 0);
let average = total / numbers.length;
console.log("Минимум:", minNum);
console.log("Максимум:", maxNum);
console.log("Сумма:", total);
console.log("Среднее:", average);
// не по быстрому
let numbers = [5, 2, 9, 1, 7];
let minNum = numbers[0];
let maxNum = numbers[0];
let total = 0;
for (let n of numbers) {
if (n < minNum) {
minNum = n;
}
if (n > maxNum) {
maxNum = n;
}
total += n;
}
let average = total / numbers.length;
console.log("Минимум:", minNum);
console.log("Максимум:", maxNum);
console.log("Сумма:", total);
console.log("Среднее:", average);
Фильтр дат после 2027.09.01.
#На последок, за 5 минут до окончания рабочего дня нужно: Есть массив с датами в четком формате yyyy.mm.dd: dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"] Нужен новый массив где будут только даты после 2027.09.01. Подсказка: попробуйте посравнивать строки через < - > , иногда это полезно😉.
let dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"]; let newItems = [];
Решение
let dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"];
let newItems = [];
for (let date of dates) {
if (date >= "2027.09.01") {
newItems.push(date);
}
}
console.log(newItems);