О каких элементах идёт речь:
const selector = '.box';
.
Вместо назначения индивидуальных обработчиков каждому элементу можно сделать один делегированный:
document.addEventListener('click', ({ target: t }) => {
if (t = t.closest(selector)) {
for (const n of document.querySelectorAll(selector)) {
n.style.background = n === t ? 'red' : 'black';
}
}
});
или
.box { background: black; }
.box.active { background: red; }
document.addEventListener('click', function({ target: t }) {
if (t = this.find(n => n.contains(t))) {
this.forEach(n => n.classList.toggle('active', n === t));
}
}.bind([...document.querySelectorAll(selector)]));
ИЛИ
При обработке клика вместо перебора всех элементов можно получить тот, состояние которого необходимо сбросить, собрав соответствующий ему селектор:
document.querySelectorAll(selector).forEach(function(n) {
n.addEventListener('click', this);
}, function() {
document.querySelector(`${selector}.active`)?.classList.remove('active');
this.classList.add('active');
});