slice() en JavaScript : extraire une portion sans modifier l'original

slice rend une portion d'un tableau ou d'une chaîne, entre deux index, sans toucher à la valeur de départ. L'index de fin est exclu.
3 min de lecture
Believemy logo

Afficher les trois derniers articles, couper un texte trop long, découper une liste en pages : à chaque fois, il s'agit de prendre un morceau sans abîmer l'ensemble.

slice fait exactement cela, et il fonctionne à l'identique sur un Array (tableau) et sur une String (chaîne de caractères).


Définition

slice(debut, fin) rend une nouvelle valeur composée des éléments situés entre les deux index. L'index de début est inclus, l'index de fin est exclu. La valeur d'origine n'est jamais modifiée.

JAVASCRIPT
const semaine = ["lun", "mar", "mer", "jeu", "ven", "sam", "dim"];

console.log(semaine.slice(0, 5));  // [ 'lun', 'mar', 'mer', 'jeu', 'ven' ]
console.log(semaine.slice(5));     // [ 'sam', 'dim' ]
console.log(semaine.length);       // 7, rien n'a bougé

const titre = "Believemy";
console.log(titre.slice(0, 6));    // "Believ"

Omettre le second argument revient à aller jusqu'au bout. Omettre les deux rend une copie complète, ce qui est l'usage détourné le plus fréquent de la méthode.


Les index négatifs

Un index négatif se compte depuis la fin, ce qui évite d'écrire longueur - 3 partout.

JAVASCRIPT
const notes = [12, 15, 9, 18, 11];

console.log(notes.slice(-2));      // [ 18, 11 ], les deux dernières
console.log(notes.slice(1, -1));   // [ 15, 9, 18 ], sans la première ni la dernière
console.log("2026-08-20".slice(-2));  // "20", le jour
Bon à savoir

Un piège discret : slice(-0) équivaut à slice(0) et rend donc tout. Si le nombre d'éléments à prendre vient d'une variable qui peut valoir zéro, testez-la avant, sinon la liste complète s'affiche là où rien ne devait apparaître.


Copier un tableau, et jusqu'où

slice() sans argument produit une copie de surface : un nouveau tableau, mais les mêmes objets à l'intérieur.

JAVASCRIPT
const original = [1, 2, 3];
const copie = original.slice();
copie.push(4);
console.log(original.length);  // 3, la copie est indépendante

const objets = [{ vu: false }];
const copieObjets = objets.slice();
copieObjets[0].vu = true;
console.log(objets[0].vu);  // true, c'est le même objet

Ajouter ou retirer des éléments dans la copie ne touche pas l'original, mais modifier une propriété d'un objet se voit des deux côtés. C'est la distinction entre Référence et valeur, et elle explique la majorité des états qui changent sans qu'on comprenne pourquoi.


Questions fréquentes

Question

Pourquoi l'index de fin est-il exclu ?

Parce que la soustraction donne alors directement le nombre d'éléments : slice(0, 5) en rend cinq. Cela permet aussi d'enchaîner des tranches sans chevauchement ni trou, slice(0, 10) puis slice(10, 20), ce qui est exactement le calcul d'une pagination.


Question

slice ou Array.splice() ?

Les deux noms se ressemblent, les comportements sont opposés. slice laisse le tableau intact et rend la portion demandée, Array.splice() modifie le tableau et rend ce qui en a été retiré. En cas de doute, retenez que slice est celui qu'on peut appeler sans conséquence.


Question

Comment couper un texte proprement à cent caractères ?

texte.slice(0, 100) coupe au caractère près, souvent au milieu d'un mot. Pour couper au dernier espace, cherchez-le d'abord : const court = texte.slice(0, 100); court.slice(0, court.lastIndexOf(" ")) + "...". Et vérifiez la longueur avant, sinon les textes courts reçoivent des points de suspension injustifiés.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.