Skip to content

Практическая работа №5

Основные теоретические положения

Section titled “Основные теоретические положения”

1. Создание массива

Массив позволяет хранить несколько значений в одной переменной.

const prices = [1200, 850, 1490, 3200, 700];

Массив может содержать значения одного или разных типов, однако при обработке данных обычно удобнее хранить однотипные значения.

const names = ["Анна", "Иван", "Мария"];

2. Индексы элементов

Индексация массива начинается с 0.

const prices = [1200, 850, 1490];
console.log(prices[0]); // 1200
console.log(prices[1]); // 850
console.log(prices[2]); // 1490

Последний элемент массива имеет индекс:

prices.length - 1

3. Свойство length

Количество элементов массива определяется свойством:

array.length

Например:

const values = [4, 7, 10, 15];
console.log(values.length); // 4

4. Изменение элемента

Значение элемента можно заменить по индексу:

const prices = [1200, 850, 1490];
prices[1] = 900;
console.log(prices);

Результат:

[1200, 900, 1490]

5. Добавление элементов

Метод push() добавляет элемент в конец массива:

const values = [10, 20];
values.push(30);

Результат:

[10, 20, 30]

Метод unshift() добавляет элемент в начало:

values.unshift(5);

6. Удаление элементов

Метод pop() удаляет последний элемент и возвращает его:

const removed = values.pop();

Метод shift() удаляет первый элемент:

const first = values.shift();

7. Поиск элемента

Метод includes() проверяет наличие значения:

const roles = ["admin", "manager", "user"];
console.log(roles.includes("manager")); // true

Метод indexOf() возвращает индекс первого найденного элемента:

console.log(roles.indexOf("user")); // 2

Если значение отсутствует:

roles.indexOf("guest"); // -1

8. Получение части массива

Метод slice() возвращает новый массив и не изменяет исходный:

const values = [10, 20, 30, 40, 50];
const part = values.slice(1, 4);
console.log(part);

Результат:

[20, 30, 40]

9. Удаление и вставка с помощью splice()

Метод splice() изменяет исходный массив.

const values = [10, 20, 30, 40];
values.splice(1, 1);

После выполнения:

[10, 30, 40]

Можно одновременно вставить новые значения:

values.splice(1, 0, 25);

10. Перебор массива

Обычный цикл for удобен, когда требуется индекс:

const prices = [1200, 850, 1490];
for (let i = 0; i < prices.length; i++) {
console.log(i, prices[i]);
}

Если нужен только элемент, можно использовать for...of:

for (const price of prices) {
console.log(price);
}

11. Счётчики и накопители

Для обработки набора значений часто используются уже изученные счётчики и накопители.

const values = [12, 7, 18, 5, 20];
let sum = 0;
let count = 0;
for (const value of values) {
sum += value;
if (value >= 10) {
count++;
}
}
console.log(sum);
console.log(count);

12. Поиск минимального и максимального значения

Начальным значением можно сделать первый элемент массива:

const values = [12, 7, 18, 5, 20];
let min = values[0];
let max = values[0];
for (const value of values) {
if (value < min) {
min = value;
}
if (value > max) {
max = value;
}
}

13. Массив как аргумент функции

После изучения функций массив можно передавать как обычный аргумент:

function calculateSum(values) {
let sum = 0;
for (const value of values) {
sum += value;
}
return sum;
}

Использование:

const prices = [1200, 850, 1490];
console.log(calculateSum(prices));

Такой подход позволяет отделять обработку данных от остальной части программы.

Задания для выполнения

Section titled “Задания для выполнения”

Часть 1. Исследование массивов

Выполните задания 1–4 полностью. Они используются как общая тренировочная часть перед самостоятельным вариантом.


Задание 1.1. Индексы, длина и изменение элементов

Создайте массив:

const values = [12, -5, 7, 0, 18, -3, 9];

Выведите:

  1. весь массив;
  2. количество элементов;
  3. первый элемент;
  4. последний элемент;
  5. элемент с индексом 3.

После этого:

  • замените элемент с индексом 3 на 25;
  • выведите изменённый массив;
  • определите индекс последнего элемента через length.

Задание 1.2. Добавление и удаление

Создайте:

const queue = ["Иван", "Анна", "Мария"];

Последовательно выполните:

  1. добавьте "Пётр" в конец;
  2. добавьте "Ольга" в начало;
  3. удалите первого человека;
  4. удалите последнего человека.

После каждого действия выводите массив.

Дополнительно выведите значения, которые были удалены с помощью shift() и pop().


Задание 1.3. Поиск значений

Создайте:

const statuses = [
"new",
"processing",
"paid",
"shipped",
"delivered"
];

Определите:

  • присутствует ли "paid";
  • присутствует ли "cancelled";
  • индекс "shipped";
  • индекс "cancelled".

Добавьте "cancelled" в конец массива и повторите поиск.


Задание 1.4. Обработка числового массива

Создайте:

const values = [15, 8, 21, 4, 16, 9, 30, 7];

С помощью цикла определите:

  • сумму элементов;
  • среднее арифметическое;
  • минимальное значение;
  • максимальное значение;
  • количество чётных элементов;
  • количество элементов больше 10.

Оформите обработку массива в функции:

calculateSum(values)
findMin(values)
findMax(values)

Часть 2. Индивидуальное задание

Section titled “Часть 2. Индивидуальное задание”

Вариант 1. Стоимость заказов

Дан массив:

const orders = [1200, 7500, 3100, 12000, 4500, 6000, 900];

Задание 1.1. Найдите общую сумму, среднюю стоимость, минимальный и максимальный заказ.

Задание 1.2. Определите количество заказов дешевле 3000 ₽ и количество заказов от 5000 ₽.

Задание 1.3. Создайте новый массив, в котором к каждому заказу от 5000 ₽ применяется скидка 5%. Исходный массив не изменяйте.


Вариант 2. Результаты тестирования

const scores = [72, 91, 58, 84, 100, 67, 45, 76];

Задание 2.1. Найдите средний, минимальный и максимальный результат.

Задание 2.2. Определите количество результатов не ниже 60, не ниже 85 и ниже 60.

Задание 2.3. Создайте массив только из результатов, соответствующих зачёту (>= 60).


Вариант 3. Загрузка сервера

const cpuLoad = [32, 68, 91, 74, 99, 45, 87, 53];

Задание 3.1. Рассчитайте среднюю и максимальную загрузку CPU.

Задание 3.2. Определите количество измерений выше 80% и выше 95%.

Задание 3.3. Все значения выше 90% замените значением 90. Выведите исходный и изменённый массивы.


Вариант 4. Время ответа сервиса

const responseTimes = [120, 85, 540, 230, 95, 710, 180, 320];

Задание 4.1. Найдите среднее, минимальное и максимальное время ответа.

Задание 4.2. Определите количество запросов быстрее 200 мс и медленнее 500 мс.

Задание 4.3. Создайте массив значений, превышающих 300 мс. Исходный массив должен остаться без изменений.


Вариант 5. Остатки товара

const stock = [15, 2, 0, 28, 4, 9, 0, 17];

Задание 5.1. Найдите общее количество единиц товара и максимальный остаток.

Задание 5.2. Определите количество позиций с нулевым остатком и количество позиций с остатком менее 5.

Задание 5.3. Замените нулевые остатки значением 10 и выведите изменённый массив.


Вариант 6. Размеры файлов

const fileSizes = [12, 850, 120, 45, 2048, 320, 75, 1500];

Задание 6.1. Найдите общий объём и средний размер файла.

Задание 6.2. Определите количество файлов больше 100 МБ и больше 1000 МБ.

Задание 6.3. Создайте массив файлов размером от 100 до 1000 МБ включительно.


Вариант 7. Температура оборудования

const temperatures = [42, 55, 61, 79, 84, 73, 49, 91];

Задание 7.1. Найдите среднюю, минимальную и максимальную температуру.

Задание 7.2. Определите количество измерений от 80 °C.

Задание 7.3. Создайте копию массива и замените все значения выше 85 на 85.


Вариант 8. Длительность обращений поддержки

const durations = [8, 15, 42, 7, 31, 60, 12, 25];

Задание 8.1. Найдите среднюю и максимальную длительность обращения.

Задание 8.2. Определите количество обращений до 15 минут включительно и более 30 минут.

Задание 8.3. Удалите первое обращение длительностью 42 минуты с помощью поиска его индекса и splice().


Вариант 9. Количество посетителей

const visitors = [120, 180, 95, 240, 310, 205, 150];

Задание 9.1. Найдите суммарное и среднее количество посетителей.

Задание 9.2. Определите количество дней, в которые посетителей было больше 200.

Задание 9.3. Добавьте в конец массива данные ещё за два дня: 275 и 190, затем повторите расчёт среднего значения.


Вариант 10. Скорость сети

const speeds = [85, 120, 45, 300, 95, 210, 60, 150];

Задание 10.1. Найдите среднюю, минимальную и максимальную скорость.

Задание 10.2. Определите количество измерений ниже 100 Мбит/с.

Задание 10.3. Создайте новый массив, содержащий только значения не ниже 100 Мбит/с.


Вариант 11. Длительность бронирований

const nights = [2, 7, 1, 5, 12, 3, 8, 4];

Задание 11.1. Найдите общее количество ночей и среднюю длительность бронирования.

Задание 11.2. Определите количество бронирований на одну ночь и от семи ночей.

Задание 11.3. Получите часть массива со второго по пятый элемент включительно с помощью slice().


Вариант 12. Оплата парковки

const hours = [1, 3, 8, 2, 12, 5, 10, 4];

Задание 12.1. Найдите среднюю и максимальную продолжительность парковки.

Задание 12.2. Определите количество парковок продолжительностью более 8 часов.

Задание 12.3. Создайте новый массив стоимости парковки из расчёта 80 ₽ за час, но не более 600 ₽ за одну парковку.


Вариант 13. Выпуск продукции

const production = [105, 98, 130, 87, 142, 116, 91];

Задание 13.1. Найдите общий и средний выпуск.

Задание 13.2. Определите количество смен с выпуском не ниже 100 изделий.

Задание 13.3. Найдите индекс лучшей смены и замените её значение на 0 в копии массива. Исходный массив не изменяйте.


Вариант 14. Финансовые операции

const operations = [5000, -1200, -700, 3500, -2400, 1800, -900];

Положительное значение означает поступление, отрицательное — расход.

Задание 14.1. Найдите общую сумму поступлений и общую сумму расходов.

Задание 14.2. Определите количество поступлений и списаний.

Задание 14.3. При начальном балансе 10000 ₽ последовательно примените все операции и сформируйте массив баланса после каждой операции.


Вариант 15. HTTP-коды

const statuses = [200, 201, 404, 500, 204, 403, 502, 301, 200];

Задание 15.1. Определите количество кодов 2xx, 3xx, 4xx и 5xx.

Задание 15.2. Проверьте наличие кодов 404, 500 и 503 с помощью методов массива.

Задание 15.3. Создайте новый массив, содержащий только коды ошибок (400–599).

Требования к результату

Section titled “Требования к результату”

В рамках практической работы необходимо:

  • выполнить все задания части 1;
  • выполнить все три задания назначенного индивидуального варианта;
  • корректно использовать индексы и свойство length;
  • использовать циклы для обработки элементов;
  • применить методы массива в соответствии с условием;
  • вынести повторяемую обработку в функции;
  • при необходимости различать изменение исходного массива и создание нового массива;
  • проверить программу и сравнить результаты с исходными данными.
  1. Что представляет собой массив в JavaScript?
  2. С какого значения начинается индекс массива?
  3. Как определить количество элементов массива?
  4. Как получить последний элемент массива?
  5. Как изменить элемент по известному индексу?
  6. Чем отличаются push() и unshift()?
  7. Чем отличаются pop() и shift()?
  8. Что возвращают методы pop() и shift()?
  9. Для чего используется includes()?
  10. Что возвращает indexOf(), если значение отсутствует?
  11. Чем slice() отличается от splice()?
  12. В каких случаях удобнее использовать обычный for?
  13. В каких случаях удобнее использовать for...of?
  14. Как найти минимальный элемент массива без использования Math.min()?
  15. Почему при поиске минимума начальным значением удобно выбирать первый элемент?
  16. Как передать массив в функцию?
  17. Изменяет ли функция исходный массив, если внутри функции изменить один из его элементов?
  18. Почему важно понимать, какие методы изменяют исходный массив?
  19. Как создать независимую копию массива?
  20. В чём отличие массива от отдельной переменной?

При защите будьте готовы изменить исходный массив, добавить новое условие обработки или объяснить, почему выбранный способ перебора подходит для задачи.

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. MDN Web Docs — Array
  2. MDN Web Docs — Indexed collections
  3. MDN Web Docs — Array.prototype.push()
  4. MDN Web Docs — Array.prototype.splice()
  5. MDN Web Docs — Array.prototype.slice()
  6. JavaScript.info — Arrays
  7. JavaScript.info — Array methods