Удалить определенное количество элементов из массива

Есть массив

let arr = [1, 2, 3, 4, 5, 5, 5, 5, 6 ...];

Пытаюсь удалить из него 2 пятерки. Т.е. что бы получилось так [1, 2, 3, 4, 5, 5, 6 ...]

Предполагаю, что это можно сделать счетчиком. т.е. цикл проходится по массиву, находит 5, удаляет ее, добавляет в переменную + 1 и так до тех пор пока переменная не будет = 2. Возможно кто то знает более удачное решение?


Ответы (1 шт):

Автор решения: Pilaton

Набросал вам тут какую-то более-менее простую для восприятия функцию в полудреме, которой скармливаете массив, элемент который оттуда нужно удалить и в каком количестве.

let arr = [1, 2, 3, 4, 5, 5, 5, 5, 6];

function deleteElArr(arr, delElement, amount) {
  if (!arr.includes(delElement)) {
    return 'В массиве нет такого элемента';
  }

  let count = 0;
  for (const el of arr) {
    if (el === delElement) count++;
  }

  count -= amount;

  if (count < 0) {
    return 'В массиве нет такого количества удаляемых элементов';
  }

  return arr.filter((el) => {
    if (el === delElement) {
      if (count == 0) return false;
      count--;
      return true;
    }
    return true;
  });
}

console.log('deleteElArr(arr, 5, 2)', deleteElArr(arr, 5, 2)); // [1, 2, 3, 4, 5, 5, 6] удалили две пятерки
console.log('deleteElArr(arr, 5, 10)', deleteElArr(arr, 5, 10)); // В массиве нет такого количества удаляемых элементов
console.log('deleteElArr(arr, 10, 2)', deleteElArr(arr, 10, 2)); // В массиве нет такого элемента

→ Ссылка