web-dev-qa-db-fra.com

Obtention du premier et du 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 ça?

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
revolver

Vous pouvez récupérer les premier et dernier éléments en utilisant le tableau destructuring avec un splat:

[first, ..., last] = array

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

56
Jon Gauthier

La manière Vanilla d'accéder au premier et au dernier élément d'un tableau est la même que dans JS: utiliser l'index 0 et length - 1:

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

CoffeeScript vous permet d'écrire quelques expressions de déstructuration de tableau Nice:

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

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

Underscore.js a des méthodes d'aide first et last qui peuvent rendre cela plus semblable à l'anglais (je ne veux pas utiliser l'expression "auto-explicative" car je pense que tout programmeur comprendrait l'indexation des tableaux). Ils sont faciles à ajouter aux objets Array si vous ne voulez pas utiliser Underscore 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 =, faire):

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

Ces fonctions vous permettent également d'obtenir le n premier ou dernier élément d'un tableau. Si vous n'avez pas besoin de cette fonctionnalité, l'implémentation serait beaucoup plus simple (juste la branche else essentiellement).

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
epidemian

Le chemin le plus court est ici
array[-1..]
Voir ce fil
https://github.com/jashkenas/coffee-script/issues/156

13
h-iwata

Vous pouvez utiliser simplement:

[..., last] = array
6
Denis S Kryukov

Vous pouvez utiliser slice pour obtenir dernier élément. 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é en

var array;
array = [1, 2, 3];
console.log("first: " + array[0]);
console.log("last: " + array.slice(-1)[0]);
4
HondaDai

Vous pouvez obtenir le element et le index du element actuel lors de l'itération à travers le tableau à l'aide de for...in De Coffeescript. Consultez le code suivant, remplacez 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

échantillon

Voici un code de travail

2
OnesimusUnbound