Как лучше укорачивать массив с начала: shift, splice или delete?

Объекты поступают по очереди. Нужно хранить в памяти последние N объектов. Объекты объемные по занимаемой памяти и число N достаточно большое.

Есть такая идея. Определяем массив arr и переменную i. По мере поступления объектов записываем их в массив. Если индекс i меньше maxi, то увеличиваем его на 1 и записываем по этому адресу. Если индекс i достиг maxi, то применяем к массиву метод shift(), который удаляет первый элемент и сдвигает все индексы, и записываем в массив по адресу i.
if( i<maxi ) i++; else ​arr.shift();
arr[i] = myobj;

Насколько это оптимально?

Как в javascript реализована функция shift()? Она физически перезаписывает элементы массива по новым адресам или массив там реализован как список и все происходит экономно?

Есть еще идея не сдвигать элементы массива, а постоянно наращивать индекс i, но удалять элементы из начала массива с помощью splice() или delete. Какой способ лучше?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
И shift, и splice будут реально смещать все элементы. Нет, массив не реализован как список. delete тоже неоптимальный вариант. А вот вышеупомянутый (в комментариях к вопросу) кольцевой буфер на массиве длиной N - идеально для твоего кейса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы