Как улучшить функцию, которая проверяет совпадения значений между массивами ListsTime и BookedTime, и добавляет стиль CSS к элементам span, отображающим те значения, которые пересекаются? Укажите, пожалуйста, как исправить ошибки в коде, чтобы он корректно применял стиль к соответствующим элементам.
Для проверки совпадений между двумя массивами в JavaScript можно использовать метод `filter` или `some`. После этого вы можете применить стиль к соответствующим элементам с использованием JavaScript. Ниже приведен пример функции, которая проверяет совпадения между массивами `ListsTime` и `BookedTime`, а затем добавляет CSS стиль к элементам `span`, отображающим совпадающие значения. ### Пример кода ```html <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Check Matches</title> <style> .highlight { background-color: yellow; /* Применяем стиль */ } </style> </head> <body> <span>10:00</span> <span>11:00</span> <span>12:00</span> <span>13:00</span> <script> const ListsTime = ['10:00', '11:00', '12:00', '13:00']; const BookedTime = ['11:00', '12:30']; function highlightMatchingTimes() { const spans = document.querySelectorAll('span'); // Находим все элементы span spans.forEach(span => { if (BookedTime.includes(span.textContent.trim())) { // Проверяем на совпадение span.classList.add('highlight'); // Добавляем CSS класс } }); } highlightMatchingTimes(); // Вызываем функцию </script> </body> </html> ``` ### Объяснение кода: 1. **CSS**: Создан класс `highlight`, который задает желтый фон для совпадающих значений. 2. **JavaScript**: - Создаются два массива: `ListsTime` и `BookedTime`. - Запускается функция `highlightMatchingTimes`, которая находит все элементы `span`. - Для каждого элемента `span` проверяется, находится ли его текстовое содержимое в массиве `BookedTime` с помощью метода `includes`. - Если совпадение найдено, к элементу добавляется класс `highlight`, который изменяет его стиль. ### Возможные улучшения - Если массивы содержат большое количество значений, можно использовать `Set` для ускорения проверки наличия элемента. - Также можно добавить поддержку регистронезависимости или другие условия проверки, если это необходимо. Пример с использованием `Set`: ```javascript const bookedSet = new Set(BookedTime); spans.forEach(span => { if (bookedSet.has(span.textContent.trim())) { span.classList.add('highlight'); } }); ``` Этот способ будет более эффективным для больших массивов, так как доступ к элементам в `Set` происходит за O(1) время.
У вас ошибка в понимании реактивности vue. Не надо писать функцию, проверяющую что-то и меняющую стиль. Надо указать, в каком случае этот стиль должен применяться.
<template> <div class="column-s max-width maib-centr-column pannel-list-time"> <span v-for="(TimeItem, index) in ListsTime" :key="index" :class="{'list-time-item': BookedTime.includes(TimeItem)}"> {{ TimeItem }}:00 </span> </div> </template> <script> export default { data() { return { ListsTime: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], BookedTime: [11, 12, 15, 16, 17, 18, 21, 22, 23], } }, } </script> <style> .list-time-item { background-color: #E5E5E5; } </style>