События всплывают. Поэтому обрабатываются несколько раз - на всех предках кликнутого элемента, которым был добавлен обработчик.
Есть два способа исправить подобное поведение.
const containerSelector = '#menu_left';
const itemSelector = `${containerSelector} li`;
const className = 'active';
Первый - останавливайте всплытие событий:
$(itemSelector).click(function(e) {
  e.stopPropagation();
  $(this).addClass(className);
});
// или
document.querySelectorAll(itemSelector).forEach(function(n) {
  n.addEventListener('click', this);
}, e => {
  e.stopPropagation();
  e.currentTarget.classList.add(className);
});
Второй - вешайте обработчик только на корневой элемент и поднимайтесь от целевого до ближайшего из тех, клики на которых хотите слушать:
$(containerSelector).click(e => {
  $(e.target).closest(itemSelector).addClass(className);
});
// или
document.querySelector(containerSelector).addEventListener('click', e => {
  const li = e.target.closest(itemSelector);
  if (li) {
    li.classList.add(className);
  }
});