Загрузка данных


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Моделирование работы маркетплейса</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        table {
            border-collapse: collapse;
            width: 100%;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #333;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #eee;
        }
        .controls {
            margin-bottom: 20px;
            padding: 10px;
            background-color: #f9f9f9;
            border: 1px solid #ccc;
        }
    </style>
</head>
<body>

    <h1>Список товаров</h1>

    <div class="controls">
        <!-- Поле ввода количества товаров -->
        <label>Сколько товаров вывести? 
            <input type="number" id="countInput" value="10" min="1" max="50">
        </label>
        <button onclick="startGeneration()">Получить товары</button>
        
        <br><br>

        <!-- Выпадающий список для сортировки -->
        <label>Сортировка (список): 
            <select id="sortSelect" onchange="sortFromSelect()">
                <option value="none">Без сортировки</option>
                <option value="name">По названию</option>
                <option value="quantity">По количеству</option>
            </select>
        </label>

        <!-- Кнопки для сортировки -->
        <button onclick="sortBy('name')">Сортировать по названию</button>
        <button onclick="sortBy('price')">Сортировать по цене</button>
        <button onclick="sortBy('quantity')">Сортировать по кол-ву</button>
    </div>

    <!-- Таблица для вывода -->
    <table>
        <thead>
            <tr>
                <th>Название</th>
                <th>Цена</th>
                <th>Кол-во</th>
                <th>Описание</th>
                <th>Бренд</th>
            </tr>
        </thead>
        <tbody id="tableBody">
            <!-- Сюда JS будет вставлять строки -->
        </tbody>
    </table>

    <script>
        // --- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (Массивы) ---
        
        // Массив продуктов (все данные хранятся здесь)
        let products = []; 

        // Массив брендов (5-7 современных брендов)
        const brands = ['Samsung', 'Apple', 'Xiaomi', 'Huawei', 'Sony', 'LG', 'Asus'];

        // Строки с буквами и цифрами для генерации названий
        const alphabetLower = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
        const alphabetUpper = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
        const digits = '0123456789';

        // Массив слов для описания
        const words = ['крутой', 'удобный', 'стильный', 'качественный', 'дешевый', 'надежный', 'современный', 'быстрый', 'легкий', 'мощный', 'компактный'];


        // --- ФУНКЦИИ ГЕНЕРАЦИИ ---

        // Функция генерации названия (5-7 символов, 1-я заглавная)
        function generateName() {
            let name = '';
            
            // 1 буква заглавная
            let randomUpperIndex = Math.floor(Math.random() * alphabetUpper.length);
            name += alphabetUpper[randomUpperIndex];

            // Определяем длину от 5 до 7
            let length = Math.floor(Math.random() * 3) + 5; 

            // Цикл для генерации остальных символов
            for (let i = 1; i < length; i++) {
                // Через if прогоняем: буква или цифра
                if (Math.random() > 0.5) {
                    // Берем случайную букву
                    let randomLowerIndex = Math.floor(Math.random() * alphabetLower.length);
                    name += alphabetLower[randomLowerIndex];
                } else {
                    // Берем случайную цифру
                    let randomDigitIndex = Math.floor(Math.random() * digits.length);
                    name += digits[randomDigitIndex];
                }
            }
            return name;
        }

        // Функция для получения слов (описания)
        function generateDescription() {
            let description = '';
            let wordCount = 0;

            // Через if прогоняем: то 5, то 6, то 7 слов
            let randomValue = Math.random();
            if (randomValue < 0.33) {
                wordCount = 5;
            } else if (randomValue < 0.66) {
                wordCount = 6;
            } else {
                wordCount = 7;
            }

            // Циклом for забираем нужное количество слов
            for (let i = 0; i < wordCount; i++) {
                let randomWordIndex = Math.floor(Math.random() * words.length);
                description += words[randomWordIndex] + ' ';
            }

            return description.trim(); // Убираем пробел в конце
        }


        // --- ОСНОВНАЯ ЛОГИКА ---

        // Функция запуска генерации
        function startGeneration() {
            let countInput = document.getElementById('countInput');
            let count = parseInt(countInput.value);

            // Очищаем массив перед новой генерацией
            products = [];

            // Генерируем нужное количество товаров
            for (let i = 0; i < count; i++) {
                // Создаем объект (ассоциативный массив) для товара
                let product = {
                    name: generateName(),
                    price: Math.floor(Math.random() * 10000) + 100, // Цена от 100 до 10100
                    quantity: Math.floor(Math.random() * 50) + 1,    // Кол-во от 1 до 50
                    description: generateDescription(),
                    brand: brands[Math.floor(Math.random() * brands.length)]
                };

                // Добавляем товар в общий массив
                products.push(product);
            }

            // Отрисовываем таблицу
            renderTable();
        }

        // Функция отрисовки таблицы
        function renderTable() {
            let tbody = document.getElementById('tableBody');
            tbody.innerHTML = ''; // Очищаем старые данные

            // Пробегаемся циклом по массиву продуктов
            for (let i = 0; i < products.length; i++) {
                let tr = document.createElement('tr');
                
                tr.innerHTML = `
                    <td>${products[i].name}</td>
                    <td>${products[i].price} ₽</td>
                    <td>${products[i].quantity} шт.</td>
                    <td>${products[i].description}</td>
                    <td>${products[i].brand}</td>
                `;
                
                tbody.appendChild(tr);
            }
        }


        // --- СОРТИРОВКА ---

        // Сортировка через выпадающий список
        function sortFromSelect() {
            let select = document.getElementById('sortSelect');
            let sortValue = select.value;

            if (sortValue === 'name') {
                products.sort((a, b) => a.name.localeCompare(b.name));
            } else if (sortValue === 'quantity') {
                products.sort((a, b) => a.quantity - b.quantity);
            }

            renderTable();
        }

        // Сортировка через кнопки
        function sortBy(criteria) {
            if (criteria === 'name') {
                products.sort((a, b) => a.name.localeCompare(b.name));
            } else if (criteria === 'price') {
                products.sort((a, b) => a.price - b.price);
            } else if (criteria === 'quantity') {
                products.sort((a, b) => a.quantity - b.quantity);
            }

            renderTable();
        }

    </script>
</body>
</html>