Comment tronquer facilement un tableau avec JavaScript?


102

Linq a une méthode d'opérateur pratique appelée Take()pour renvoyer un nombre donné d'éléments dans tout ce qui implémente IEnumerable. Y a-t-il quelque chose de similaire dans jQuery pour travailler avec des tableaux?

Ou, demandé différemment: comment puis-je tronquer un tableau en Javascript?


22
Les gars, s'il vous plaît, apprenez JavaScript avant jQuery. J'ai peur que les questions de demain soient "Quels autres types de données jQuery expose à côté des tableaux?".
— Ionuț G. Stan

Réponses:


184

Il existe une méthode de tranche

array.slice(0, 4);

Reviendra les quatre premiers éléments.

N'oubliez pas de la réattribuer à votre variable si vous souhaitez supprimer les autres valeurs.

Remarque: il s'agit simplement de javascript standard, pas besoin de jquery.


15
Ne renverrait-il pas (0,4) les 4 premiers pas les 5 premiers?
— Simon Keep

11
Ce n'est en fait pas vrai. Simon Keep a raison - le deuxième argument de la méthode .slice () est la position du tableau après le dernier élément à renvoyer. array.slice (0, 4) renverrait les éléments 0, 1, 2 et 3 - un total de 4 éléments. Considérez le deuxième argument comme le point de coupure, où .slice (0, x) renverra tous les éléments depuis le début du tableau, jusqu'à x mais non compris.
— Bungle

1
endn'est PAS inclus, alors @SimonKeep a raison, voir MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/…
— AsTeR

2
N'oubliez pas de l'attribuer à la variable, c'est très important aussi simple que cela puisse paraître
— kolexinfos

6
mauvaise façon, vous créez une nouvelle instance de tableau, gardez à l'esprit l'utilisation de la mémoire lorsque le codage de js n'est pas une mauvaise idée.
— G.Ghez

125

(2 ans plus tard ...) Si vous cherchez vraiment à tronquer un tableau, vous pouvez également utiliser l' lengthattribut:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

Remarque: si vous attribuez une longueur plus longue que la longueur actuelle, des éléments de tableau non définis sont introduits, comme illustré ci-dessous.

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"

ÉDITER:

Comme @twhitehead mentionné ci-dessous, l'ajout d'éléments non définis peut être évité en faisant ceci:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"

5
J'ai d'abord été surpris quand j'ai vu cela dans un code ... Mais c'est le meilleur moyen (si vous tronquez à
— kumarharsh

5
C'est une solution étonnamment simple.
— Dominique

3
Qu'en est-il de la collecte des déchets de cette façon?
— G.Ghez

1
@JonathanM En fait, les valeurs nulles ne sont pas introduites; les nouvelles variables ne sont pas définies, car elles sont déclarées mais ne reçoivent aucune valeur.
— Håvard Geithus

3
Incroyable! Cela vaut la peine de dire que cette méthode modifie la même chose Arrayau lieu de créer un nouveau Array.
— Roomy

22

Si vous demandez comment tronquer (modifier un tableau en supprimant les éléments de la fin), utilisez splice :

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

Si vous demandez comment récupérer un sous-ensemble d'un tableau sans modifier l'original, utilisez slice .

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

N'oubliez pas que l'épissure modifie, coupe les accès. Les nombres négatifs comme premier argument indiquent un index à partir de la fin du tableau.


11

Définissez la propriété .length sur une valeur inférieure.

Documentation officielle: Array.prototype.length


3
pour tuer tous les éléments du tableau, définir la longueur à zéro est le plus simple.
— hanmari

5

Si vous souhaitez à la fois obtenir les éléments et les supprimer du tableau, utilisez splice .

Si vous souhaitez conserver les éléments dans le tableau, utilisez slice


1

Si vous souhaitez extraire sélectivement des éléments d'un tableau, vous pouvez utiliser le jQuery.grep méthode .

(à partir de la documentation jQuery)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.