Подтвердить что ты не робот

Можно ли ограничить длину массива в JavaScript?

Я хочу отобразить историю просмотра продукта, поэтому я храню идентификаторы продуктов в cookie браузера.

Поскольку список истории ограничен 5 элементами, я конвертирую значение cookie в массив, затем проверяю его длину и сокращаю избыточность.

Ниже приведен код, который я пробовал, но он не работает; элемент массива не удаляется.

Я хотел бы спросить, как ограничить длину массива, чтобы он мог хранить только 5 элементов?

или

Как я могу вырезать элементы после индекса массива 4?

var id = product_id;
var browseHistory = $.cookie('history');
if (browseHistory != null) {
  var old_cookie = $.cookie('history');
  var new_cookie = '';

  if (old_cookie.indexOf(',') != -1) {
    var arr = old_cookie.split(',');
    if (arr.length >= 5) {
      arr.splice(4, 1)
    }
  }

  new_cookie = id + ',' + old_cookie;
  $.cookie('history', new_cookie, { expires: 7, path: '/' });
} else {
  $.cookie('history', id, { expires: 7, path: '/' });
}
4b9b3361

Ответ 1

Вы не используете сплайсинг правильно:

arr.splice(4, 1)

это удалит 1 элемент в индексе 4. см. здесь

Я думаю, вы хотите использовать slice:

arr.slice(0,5)

это вернет элементы в позиции от 0 до 4.

Это предполагает, что весь остальной код (файлы cookie и т.д.) работает правильно

Ответ 2

arr.length = Math.min(arr.length, 5)

Ответ 3

самый быстрый и самый простой способ - установить свойство .length на нужную длину:

arr.length = 4;

Это также желаемый способ для reset/пустых массивов:

arr.length = 0;

Предостережение:. Это свойство также может сделать массив длиннее, чем оно: если его длина равна 2, запуск arr.length = 4 добавит к нему два элемента undefined. Возможно, добавьте условие:

if (arr.length > 4) arr.length = 4;

Ответ 4

Вам нужно использовать сокращенный массив после удаления из него элементов. Вы игнорируете сокращенный массив.

Вы конвертируете cookie в массив. Вы уменьшаете длину массива, а затем никогда не используете этот сокращенный массив. Вместо этого вы просто используете старый файл cookie (unshortened).

Вы должны преобразовать сокращенный массив обратно в строку с помощью .join(","), а затем использовать его для нового файла cookie вместо old_cookie, который не будет сокращен.

Возможно, вы также не используете .splice() правильно, но я точно не знаю, какова ваша цель для сокращения массива. Вы можете прочитать о точной функции .splice() здесь.