Вы можете использовать ассоциативный массив и перебирать ключи, чтобы найти совпадение.Сортировка клавиш в порядке частоты погодных условий может ускорить его, но незначительно.
Этот фрагмент заменяет пробелы в weatherName
на -
и меняет строку на строчные, просто чтобы быть в безопасности.
const weatherName = "Clear Sky";
const bgImg = document.querySelector('#element-body img');
const localWeather = weatherName.replace(/\s/, '-').toLowerCase();
// Default icon name
let icon = 'pexels-photo-39811';
const iconNames = {
'clouds': 'clouds',
'clear-sky': 'clear-sky',
'drizzle': 'rain',
'dust': 'dust',
'fog': 'foggy',
'haze': 'haze',
'mist': 'mist',
'rain': 'rain',
'snow': 'snow',
'smoke': 'smoke',
'thunderstorm': 'thunderstorm',
}
for (let key of Object.keys(iconNames)) {
if (localWeather.includes(key)) {
icon = iconNames[key];
// Icon found so exit the `for()` loop
break;
}
}
bgImg.src = `./images/${icon}.jpg`;
<div id="element-body">
<img id="weather-icon" src="" title="Local weather" />
</div>
В ответ на часть 2 вашего вопроса обмен значения атрибута изображения src
происходит быстрее, чем создание нового элемента.Если он кажется медленным, то это проблема производительности веб-сервера.
Альтернативный вариант - реализовать спрайты изображений в CSS .Если изображения значков объединяются в одно изображение, вы можете использовать CSS-классы для отображения правильной части изображения, и новый значок погоды должен появляться в миллисекундах.