```svelte
{#each expression as name}...{/each}
```
```svelte
{#each expression as name, index}...{/each}
```
Vous pouvez itérer sur des valeurs en utilisant un bloc `#each`. Les valeurs en questions peuvent
être des tableaux, des objets similaires à des tableaux (c-à-d tout ce qui possède une propriété
`length`), ou des itérables comme `Map` et `Set` — autrement dit, tout ce qui peut être utilisé avec
`Array.from`.
```svelte
Shopping list
{#each items as item}
- {item.name} x {item.qty}
{/each}
```
Un bloc `#each` peut également préciser un _index_, correspondant au deuxième argument d'un callback
`array.map(...)`.
```svelte
{#each items as item, i}
{i + 1}: {item.name} x {item.qty}
{/each}
```
## Les blocs `each` à clé [!VO]Keyed each blocks
```svelte
{#each expression as name (key)}...{/each}
```
```svelte
{#each expression as name, index (key)}...{/each}
```
Si une expression _key_ est fournie — qui se doit d'identifier de manière unique chaque élément de
la liste — Svelte va s'en servir pour remplacer finement les éléments de la liste lorsque celle-ci
change, plutôt que d'ajouter ou supprimer les éléments à la fin. La clé (_key_) peut être n'importe
quel objet, mais les chaînes de caractères et les nombres sont recommandés car il permettent à
l'identité de persister lorsque les objets eux-mêmes changent.
```svelte
{#each items as item (item.id)}
{item.name} x {item.qty}
{/each}
{#each items as item, i (item.id)}
{i + 1}: {item.name} x {item.qty}
{/each}
```
Vous pouvez déstructurer librement ou utiliser comme bon vous semble le paramètre de reste dans les
blocs `#each`.
```svelte
{#each items as { id, name, qty }, i (id)}
{i + 1}: {name} x {qty}
{/each}
{#each objects as { id, ...rest }}
{id}
{/each}
{#each items as [id, ...rest]}
{id}
{/each}
```
## Blocs `each` sans élément [!VO]Each blocks without an item
```svelte
{#each expression}...{/each}
```
```svelte
{#each expression, index}...{/each}
```
Dans le cas où vous souhaitez uniquement afficher quelque chose `n` fois, vous pouvez omettre le
`as`
([demo](/playground/untitled#H4sIAAAAAAAAE3WR0W7CMAxFf8XKNAk0WsSeUEaRpn3Guoc0MbQiJFHiMlDVf18SOrZJ48259_jaVgZmxBEZZ28thgCNFV6xBdt1GgPj7wOji0t2EqI-wa_OleGEmpLWiID_6dIaQkMxhm1UdwKpRQhVzWSaVORJNdvWpqbhAYVsYQCNZk8thzWMC_DCHMZk3wPSThNQ088I3mghD9UwSwHwlLE5PMIzVFUFq3G7WUZ2OyUvU3JOuZU332wCXTRmtPy1NgzXZtUFp8WFw9536uWqpbIgPEaDsJBW90cTOHh0KGi2XsBq5-cT6-3nPauxXqHnsHJnCFZ3CvJVkyuCQ0mFF9TZyCQ162WGvteLKfG197Y3iv_pz_fmS68Hxt8iPBPj5HscP8YvCNX7uhYCAAA=)):
```svelte
{#each { length: 8 }, rank}
{#each { length: 8 }, file}
{/each}
{/each}
```
## Blocs `else` [!VO]Else blocks
```svelte
{#each expression as name}...{:else}...{/each}
```
Un bloc `#each` peut également avoir une clause `{:else}`, qui sera affichée si la liste est vide.
```svelte
{#each todos as todo}
{todo.text}
{:else}
Rien à faire aujourd'hui !
{/each}
```