Obtenir le premier et le dernier élément d'un tableau dans CoffeeScript

Si disons que j'ai un tableau et que je voudrais parcourir le tableau, mais faire quelque chose de différent du premier et du dernier élément. Comment dois-je faire?

En prenant le code ci-dessous comme exemple, comment puis-je alerter l'élément a et e?

array = [a,b,c,d,e]
for element in array
  console.log(element)

Merci.

27
demandé sur revolver 2012-07-18 06:39:25

6 réponses

, Vous pouvez récupérer les premier et dernier éléments en utilisant la matrice déstructuration, avec un splat:

[first, ..., last] = array

Cette utilisation splat est prise en charge dans CoffeeScript >= 1.7.0.

55
répondu Jon Gauthier 2014-03-26 17:48:09

La façon vanille d'accéder au premier et au dernier élément d'un tableau est la même que dans JS really: en utilisant l'index 0 et length - 1:

console.log array[0], array[array.length - 1]

CoffeeScript vous permet d'écrire de belles expressions de déstructuration de Tableau:

[first, mid..., last] = array
console.log first, last

Mais je ne pense pas que cela en vaut la peine si vous n'utilisez pas les éléments du milieu.

Soulignement.js a une aide first et last méthodes qui peuvent rendre cela plus anglais (Je ne veux pas utiliser la phrase "self-explanatory" comme je pense que tout programmeur comprendrait l'indexation de tableau). Ils sont faciles à ajouter aux objets Array Si vous ne voulez pas utiliser le trait de soulignement et que cela ne vous dérange pas de polluer l'espace de noms global (c'est ce que d'autres bibliothèques, comme Sugar.js, ne):

Array::first ?= (n) ->
  if n? then @[0...(Math.max 0, n)] else @[0]

Array::last ?= (n) ->
  if n? then @[(Math.max @length - n, 0)...] else @[@length - 1]

console.log array.first(), array.last()

Mise à Jour

Cette fonction vous permet également d'obtenir lesN premiers OU derniers éléments d'un tableau. Si vous n'avez pas besoin de cette fonctionnalité l'implémentation serait beaucoup plus simple (juste la branche else fondamentalement).

Mise à Jour 2

CoffeeScript >= 1.7 vous permet d'écrire:

[first, ..., last] = array

Sans générer un tableau inutile avec les éléments du milieu: d

24
répondu epidemian 2014-04-21 23:35:07

La voie La plus courte est ici
array[-1..]
Voir ce fil
https://github.com/jashkenas/coffee-script/issues/156

14
répondu h-iwata 2014-02-18 09:56:06

Vous pouvez utiliser simplement:

[..., last] = array
6
répondu Denis S Kryukov 2015-01-15 14:46:56

Vous pouvez utiliser slice pour obtenir , dernier élément de. En javascript, slice peut passer un nombre négatif comme -1 comme arguments.

Par exemple:

array = [1, 2, 3 ]
console.log "first: #{array[0]}"
console.log "last: #{array[-1..][0]}"

Être compilé dans

var array;
array = [1, 2, 3];
console.log("first: " + array[0]);
console.log("last: " + array.slice(-1)[0]);
4
répondu HondaDai 2013-06-14 08:29:58

Vous pouvez obtenir le element et le index du courant element lors de l'itération dans le tableau en utilisant for...in de Coffeescript. Voir le code suivant, remplacez les special_process_for_element et normal_process_for_element par votre code.

array = [a, b, c, d]
FIRST_INDEX = 0
LAST_INDEX = array.length - 1

for element, index in array
    switch index
        when FIRST_INDEX, LAST_INDEX
            special_process_for_element
        else
            normal_process_for_element

Exemple de

Voici un code de travail

2
répondu OnesimusUnbound 2012-07-18 03:22:31