Как улучшить JavaScript-функцию для предотвращения утечек памяти?

Привет, ребята! У меня есть задача по оптимизации JavaScript-кода. Нужно улучшить функцию, которая обрабатывает массив данных каждые 10 секунд. Вот что она делает:

  1. Убирает первый элемент из массива
  2. Добавляет новое значение в конец
  3. Создает новый массив пар [индекс, значение]
  4. Выводит результат в консоль

Проблема в том, что эта функция может вызывать утечки памяти при частом использовании. Как ее можно переписать, чтобы избежать этого? Вот примерный код:

let dataArray = [10, 15, 20, 25, 30];

function updateData(newValue) {
  dataArray.shift();
  dataArray.push(newValue);
  
  let result = dataArray.map((value, index) => [index, value]);
  
  console.log(result);
}

Буду благодарен за любые идеи по оптимизации! Может, есть способ избежать создания нового массива каждый раз?

ну вот что я думаю. не обязательно создавать новый массив каждый раз, можно обновлять существующий. попробуй что-то типа:

let result = [[0,0], [1,0], [2,0], [3,0], [4,0]];

function updateData(newValue) {
  dataArray.shift();
  dataArray.push(newValue);
  
  for (let i = 0; i < dataArray.length; i++) {
    result[i][1] = dataArray[i];
  }
  
  console.log(result);
}

так ты переиспользуешь один и тот же массив result, просто обновляя значения. должно меньше нагружать память. еще можно подумать над использованием WeakMap если нужно хранить много данных. но для небольших массивов и такой вариант сойдет

А может вообще обойтись без массива? Можно использовать объект для хранения последних 5 значений. Типа так:

let data = {};
let counter = 0;

function updateData(newValue) {
data[counter % 5] = newValue;
counter++;

console.log(Object.entries(data));
}

Так и память экономим, и с большими объемами данных справится. Плюс код проще читается. Как думаешь, подойдет для твоей задачи?

Могу предложить вариант с циклическим буфером. Создаем массив фиксированного размера и индекс, который будет указывать на текущую позицию:

const bufferSize = 5;
let buffer = new Array(bufferSize).fill(0);
let index = 0;

function updateData(newValue) {
  buffer[index] = newValue;
  index = (index + 1) % bufferSize;
  
  console.log(buffer.map((v, i) => [(i + index) % bufferSize, v]));
}

Так избегаем создания новых массивов и сдвигов. Память используется эффективнее. Производительность должна быть выше, особенно на больших объемах данных.