web-dev-qa-db-fra.com

Puis-je limiter la longueur d'un tableau en JavaScript?

Je souhaite afficher l'historique de navigation du produit, je stocke donc les identifiants du produit dans un cookie de navigateur.

Parce que la liste de l'historique est limitée à 5 éléments, je convertis la valeur du cookie en un tableau, puis vérifie sa longueur et coupe le redondant.

Le code ci-dessous est ce que j'ai essayé, mais cela ne fonctionne pas; l'élément de tableau n'est pas supprimé.

Je voudrais savoir comment limiter la longueur du tableau afin qu'il ne puisse stocker que 5 éléments?

Ou

Comment puis-je couper les éléments après l'index du tableau 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: '/' });
}
40
Charles Yeung

Vous n'utilisez pas correctement l'épissure:

arr.splice(4, 1)

cela supprimera 1 élément à l'index 4. voir ici

Je pense que vous voulez utiliser tranche :

arr.slice(0,5)

cela renverra les éléments en position 0 à 4.

Cela suppose que tout le reste de votre code (cookies, etc.) fonctionne correctement

63
Samuele Mattiuzzo
arr.length = Math.min(arr.length, 5)
16
justspamjustin

La méthode la plus rapide et la plus simple consiste à définir .length propriété à la longueur souhaitée:

arr.length = 4;

C'est également le moyen souhaité de réinitialiser/vider les tableaux:

arr.length = 0;

Avertissement: la définition de cette propriété peut également allonger le tableau: si sa longueur est de 2, exécuter arr.length = 4 y ajoutera deux undefined éléments. Ajoutez peut-être une condition:

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

Alternativement:

arr.length = Math.min(arr.length, 4);
13
fregante
var  arrLength = arr.length;
if(arrLength > maxNumber){
    arr.splice( 0, arrLength - maxNumber);
}

Cette soultion fonctionne mieux dans un environnement dynamique comme p5js. J'ai mis cela à l'intérieur de l'appel de tirage et il serre la longueur du tableau dynamiquement.

Le problème avec:

arr.slice(0,5)

... c'est qu'il ne prend qu'un nombre fixe d'éléments du tableau par trame de dessin, ce qui ne permettra pas de maintenir la taille du tableau constante si votre utilisateur peut ajouter plusieurs éléments.

Le problème avec:

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

... c'est qu'il enlève les éléments de la fin du tableau, donc qui ne parcourra pas le tableau si vous ajoutez également à la fin avec Push ().

3
Luche

Vous devez réellement utiliser le tableau raccourci après en avoir supprimé des éléments. Vous ignorez le tableau raccourci.

Vous convertissez le cookie en un tableau. Vous réduisez la longueur du tableau et puis vous n'utilisez jamais ce tableau raccourci. Au lieu de cela, vous utilisez simplement l'ancien cookie (le plus court).

Vous devez reconvertir le tableau raccourci en une chaîne avec .join(","), puis l'utiliser pour le nouveau cookie au lieu d'utiliser old_cookie Qui n'est pas raccourci.

Vous n'utilisez peut-être pas non plus .splice() correctement, mais je ne sais pas exactement quel est votre objectif de raccourcir le tableau. Vous pouvez lire la fonction exacte de .splice()ici .

1
jfriend00