```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

``` 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} ```