# Отчет по лабораторной работеЦелью данной лабораторной работы является изучение обработки транзакционных данных с использованием массива объектов в JavaScript. Основной задачей является создание набора функций для работы с транзакциями, а также их тестирование.
Для начала необходимо создать массив объектов, каждый из которых представляет собой транзакцию. Каждая транзакция имеет следующие атрибуты:
transaction_id: Идентификатор транзакцииtransaction_date: Дата транзакцииtransaction_amount: Сумма транзакцииtransaction_type: Тип транзакции (например, дебет или кредит)transaction_description: Описание транзакцииmerchant_name: Название магазина или получателяcard_type: Тип карты, с которой совершена транзакция
const transactions = [
{
transaction_id: '1',
transaction_date: '2025-03-01',
transaction_amount: 200,
transaction_type: 'debit',
transaction_description: 'Оплата за услуги связи',
merchant_name: 'МТС',
card_type: 'debit'
},
{
transaction_id: '2',
transaction_date: '2025-03-01',
transaction_amount: 500,
transaction_type: 'credit',
transaction_description: 'Пополнение счета',
merchant_name: 'ПриватБанк',
card_type: 'credit'
},
{
transaction_id: '3',
transaction_date: '2025-03-02',
transaction_amount: 150,
transaction_type: 'debit',
transaction_description: 'Покупка в магазине',
merchant_name: 'Лента',
card_type: 'debit'
}
];Теперь необходимо создать несколько функций для обработки транзакций:
-
Получение уникальных типов транзакций
Эта функция возвращает список уникальных типов транзакций из массива.
function getUniqueTransactionTypes(transactions) { const types = transactions.map(transaction => transaction.transaction_type); return [...new Set(types)]; }
-
Подсчет общей суммы транзакций
Эта функция вычисляет общую сумму всех транзакций.
function calculateTotalAmount(transactions) { return transactions.reduce((total, transaction) => total + transaction.transaction_amount, 0); }
-
Подсчет суммы транзакций по конкретной дате
Эта функция вычисляет общую сумму транзакций для заданной даты.
function calculateTotalAmountByDate(transactions, year, month, day) { return transactions .filter(transaction => { const date = new Date(transaction.transaction_date); return date.getFullYear() === year && date.getMonth() + 1 === month && date.getDate() === day; }) .reduce((total, transaction) => total + transaction.transaction_amount, 0); }
-
Фильтрация транзакций по типу (например, дебетовые или кредитные)
Эта функция фильтрует транзакции по типу.
function getTransactionByType(transactions, type) { return transactions.filter(transaction => transaction.transaction_type === type); }
-
Фильтрация транзакций в диапазоне дат
Эта функция фильтрует транзакции по диапазону дат.
function getTransactionsInDateRange(transactions, startDate, endDate) { const start = new Date(startDate); const end = new Date(endDate); return transactions.filter(transaction => { const date = new Date(transaction.transaction_date); return date >= start && date <= end; }); }
-
Фильтрация транзакций по имени магазина
Эта функция фильтрует транзакции по названию магазина.
function getTransactionsByMerchant(transactions, merchantName) { return transactions.filter(transaction => transaction.merchant_name === merchantName); }
-
Вычисление средней суммы транзакций
Эта функция вычисляет среднюю сумму транзакций.
function calculateAverageTransactionAmount(transactions) { const total = calculateTotalAmount(transactions); return total / transactions.length; }
-
Фильтрация транзакций по диапазону сумм
Эта функция фильтрует транзакции по диапазону сумм.
function getTransactionsByAmountRange(transactions, minAmount, maxAmount) { return transactions.filter(transaction => transaction.transaction_amount >= minAmount && transaction.transaction_amount <= maxAmount); }
-
Подсчет суммы дебетовых транзакций
Эта функция вычисляет сумму всех дебетовых транзакций.
function calculateTotalDebitAmount(transactions) { return transactions .filter(transaction => transaction.transaction_type === 'debit') .reduce((total, transaction) => total + transaction.transaction_amount, 0); }
-
Поиск месяца с наибольшим количеством транзакций
Эта функция находит месяц с наибольшим количеством транзакций.
function findMostTransactionsMonth(transactions) { const months = transactions.reduce((acc, transaction) => { const month = new Date(transaction.transaction_date).getMonth() + 1; acc[month] = (acc[month] || 0) + 1; return acc; }, {}); return Object.keys(months).reduce((maxMonth, month) => months[month] > months[maxMonth] ? month : maxMonth, Object.keys(months)[0]); }
-
Поиск месяца с наибольшим количеством дебетовых транзакций
Эта функция находит месяц с наибольшим количеством дебетовых транзакций.
function findMostDebitTransactionMonth(transactions) { const months = transactions.reduce((acc, transaction) => { if (transaction.transaction_type === 'debit') { const month = new Date(transaction.transaction_date).getMonth() + 1; acc[month] = (acc[month] || 0) + 1; } return acc; }, {}); return Object.keys(months).reduce((maxMonth, month) => months[month] > months[maxMonth] ? month : maxMonth, Object.keys(months)[0]); }
-
Поиск наиболее распространенного типа транзакции
Эта функция находит наиболее распространенный тип транзакции.
function mostTransactionTypes(transactions) { const types = transactions.map(transaction => transaction.transaction_type); const typeCounts = types.reduce((acc, type) => { acc[type] = (acc[type] || 0) + 1; return acc; }, {}); return Object.keys(typeCounts).reduce((mostCommon, type) => typeCounts[type] > typeCounts[mostCommon] ? type : mostCommon, Object.keys(typeCounts)[0]); }
-
Поиск транзакций до определенной даты
Эта функция находит транзакции, совершенные до указанной даты.
function getTransactionsBeforeDate(transactions, date) { const targetDate = new Date(date); return transactions.filter(transaction => new Date(transaction.transaction_date) < targetDate); }
-
Поиск транзакции по идентификатору
Эта функция находит транзакцию по ее идентификатору.
function findTransactionById(transactions, id) { return transactions.find(transaction => transaction.transaction_id === id); }
-
Получение всех описаний транзакций
Эта функция возвращает массив описаний всех транзакций.
function mapTransactionDescriptions(transactions) { return transactions.map(transaction => transaction.transaction_description); }
Для того чтобы убедиться, что все функции работают корректно, мы создаем массив транзакций и тестируем все реализованные функции. Результаты тестирования выводятся в консоль, чтобы можно было проверить правильность работы каждой функции.
const transactions = [
{
transaction_id: '1',
transaction_date: '2025-03-01',
transaction_amount: 200,
transaction_type: 'debit',
transaction_description: 'Оплата за услуги связи',
merchant_name: 'МТС',
card_type: 'debit'
},
{
transaction_id: '2',
transaction_date: '2025-03-01',
transaction_amount: 500,
transaction_type: 'credit',
transaction_description: 'Пополнение счета',
merchant_name: 'ПриватБанк',
card_type: 'credit'
},
{
transaction_id: '3',
transaction_date: '2025-03-02',
transaction_amount: 150,
transaction_type: 'debit',
transaction_description: 'Покупка в магазине',
merchant_name: 'Лента',
card_type: 'debit'
}
];-
Получение уникальных типов транзакций
console.log('Уникальные типы транзакций:', getUniqueTransactionTypes(transactions));
-
Общая сумма транзакций
console.log('Общая сумма транзакций:', calculateTotalAmount(transactions));
-
Общая сумма за конкретную дату (2025-03-01)
console.log('Общая сумма за 2025-03-01:', calculateTotalAmountByDate(transactions, 2025, 3, 1));
-
Дебетовые транзакции
console.log('Дебетовые транзакции:', getTransactionByType(transactions, 'debit'));
-
Транзакции в диапазоне дат
console.log('Транзакции в диапазоне дат:', getTransactionsInDateRange(transactions, '2025-03-01', '2025-03-02'));
-
Транзакции с магазином Лента
console.log('Транзакции в магазине Лента:', getTransactionsByMerchant(transactions, 'Лента'));
-
Средняя сумма транзакций
console.log('Средняя сумма транзакций:', calculateAverageTransactionAmount(transactions));
-
Транзакции в диапазоне сумм
console.log('Транзакции в диапазоне сумм:', getTransactionsByAmountRange(transactions, 100, 500));
-
Сумма дебетовых транзакций
console.log('Сумма дебетовых транзакций:', calculateTotalDebitAmount(transactions));
-
Месяц с наибольшим количеством транзакций
console.log('Месяц с наибольшим количеством транзакций:', findMostTransactionsMonth(transactions));
-
Месяц с наибольшим количеством дебетовых транзакций
console.log('Месяц с наибольшими дебетовыми транзакциями:', findMostDebitTransactionMonth(transactions));
-
Наиболее распространенный тип транзакции
console.log('Наиболее распространенный тип транзакции:', mostTransactionTypes(transactions));
-
Транзакции до определенной даты
console.log('Транзакции до 2025-03-02:', getTransactionsBeforeDate(transactions, '2025-03-02'));
-
Поиск транзакции по ID
console.log('Транзакция с ID 2:', findTransactionById(transactions, '2'));
-
Получение описаний транзакций
console.log('Описания транзакций:', mapTransactionDescriptions(transactions));
В ходе выполнения лабораторной работы были изучены основы работы с массивами, функциями и объектами в JavaScript. Реализованные функции позволяют проводить анализ транзакций по различным критериям: по типу, по сумме, по дате, по магазину и многим другим параметрам. Тестирование показало, что все функции работают корректно как с обычными массивами, так и с крайними случаями, например, с пустыми массивами или массивами с одной транзакцией.