Dans un tableau javascript, comment obtenir les 5 derniers éléments, à l'exclusion du premier élément?


197
[1, 55, 77, 88] // ...would return [55, 77, 88]

ajout d'exemples supplémentaires:

[1, 55, 77, 88, 99, 22, 33, 44] // ...would return [88, 99, 22, 33, 44]

[1] // ...would return []

1
Votre exemple est les 3 derniers éléments. Fournissez un peu plus de vos spécifications.
— Jason McCreary

1
voulez-vous toujours les 5 derniers? ou tout le monde sauf le premier, peu importe la longueur?
— ShaneBlake

3
@ Jason: Il veut jusqu'à cinq éléments.
— SLaks

@Jason, oui je veux les derniers éléments (jusqu'à 5)
— TIMEX

3
Comme dans ma réponse qui est probablement la manière la plus élégante et la plus courte de le fairearr.slice(1).slice(-5)
— Belldandu

Réponses:


339

Tu peux appeler:

arr.slice(Math.max(arr.length - 5, 1))

Si vous ne souhaitez pas exclure le premier élément, utilisez

arr.slice(Math.max(arr.length - 5, 0))

8
+1 simple et utile. De plus, je pense que la dernière valeur (1) doit être 0 pour fonctionner, cette tranche d'arrangement (Math.max (arr.length - 5, 0)) a fonctionné pour moi.
— QMaster

@TuteC Non, ce n'est pas le cas, il renvoie également le premier élément.
— Jan

3
Ou vous auriez pu faire une tranche de chaîne comme dans ma réponse arr.slice(1).slice(-5)>.>. certains d'entre vous ont également échoué à lire le titre car l'OP voulait exclure le premier résultat du tableau: |
— Belldandu

21
ne devrait-il pas en être ainsi arr.slice(Math.max(arr.length - 5, 0))?
— user151496

7
La question indique "à l'exclusion du premier élément", c'est pourquoi la dernière valeur est 1ou non 0.
— Don Cruickshank

68

En voici une que je n'ai pas vue encore plus courte

arr.slice(1).slice(-5)

Exécutez l'extrait de code ci-dessous pour prouver qu'il fait ce que vous voulez

var arr1 = [0, 1, 2, 3, 4, 5, 6, 7],
  arr2 = [0, 1, 2, 3];

document.body.innerHTML = 'ARRAY 1: ' + arr1.slice(1).slice(-5) + '<br/>ARRAY 2: ' + arr2.slice(1).slice(-5);

Une autre façon de le faire serait d'utiliser lodash https://lodash.com/docs#rest - c'est bien sûr si cela ne vous dérange pas d'avoir à charger un énorme fichier minifié javascript si vous essayez de le faire à partir de votre navigateur.

_.slice(_.rest(arr), -5)


29

Si vous utilisez lodash, c'est encore plus simple avec takeRight .

_.takeRight(arr, 5);


2
Il prend également en charge si le tableau a moins de 5 éléments
— Devank

11

Essaye ça:

var array = [1, 55, 77, 88, 76, 59];
var array_last_five;
array_last_five = array.slice(-5);
if (array.length < 6) {
     array_last_five.shift();
}

2
Cela ne fonctionne que pour l'exemple spécifique de l'utilisateur. Il s'agit de tableaux d'une longueur de 4.
— Jason McCreary

Non, pas vraiment. Fonctionne bien avec n'importe quelle longueur de tableau. Le -3 indique que les 3 derniers éléments doivent être retournés.
— Arka

1
Permettez-moi de reformuler. A partir des commentaires, des cinq derniers éléments , vous ne retournez que les 3. derniers. C'est l'exemple. Pas la spécification.
— Jason McCreary

1
-1 L'agitation consiste à fournir la bonne réponse. Bien que votre réponse fonctionne pour renvoyer les 3 derniers éléments, elle ne fonctionne pas pour fournir les 5 derniers éléments, à l'exclusion du premier élément . Quelle était la spécification du PO.
— Jason McCreary

1
Encore une fois, il ne s'agit pas de s'inquiéter . Le point principal de SO est de fournir des réponses aux questions spécifiques des utilisateurs. Votre réponse originale ne l'a pas fait. En fait, votre mise à jour ne répond toujours pas aux spécifications.
— Jason McCreary

9

var y = [1,2,3,4,5,6,7,8,9,10];

console.log(y.slice((y.length - 5), y.length))

tu peux le faire!


5
C'est la même chose que: y.slice (- 5)
— Dudi

1

Manière ES6:

J'utilise l' affectation de déstructuration du tableau pour obtenir firstet les restéléments restants , puis je prendrai les cinq derniers de la méthode restwith slice :

const cutOffFirstAndLastFive = (array) => {
  const [first, ...rest] = array;
  return rest.slice(-5);
}

cutOffFirstAndLastFive([1, 55, 77, 88]);

console.log(
  'Tests:',
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88])),
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88, 99, 22, 33, 44])),
  JSON.stringify(cutOffFirstAndLastFive([1]))
);

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.