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 []
TIMEX
la source
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))
SLaks
la source
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)

Belldandu
la source
29

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

_.takeRight(arr, 5);

hhsadiq
la source
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();
}
Arka
la source
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!

Madhu Kumar
la source
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]))
);

déesse fraise
la source