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?

Alan Le
la source
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.

Bob
la source
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"
Jonathan M
la source
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.

Chadwick
la source
11

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

Documentation officielle: Array.prototype.length

G. Ghez
la source
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

PatrikAkerstrand
la source
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(", "));
ScottKoon
la source