JavaScriptTableaux

Array.prototype.with()

Renvoie une copie du tableau dans laquelle l’élément à l’indice donné a une nouvelle valeur.

Renvoie
Un nouveau tableau avec l’élément remplacé.
Modifie l’original
Non
Sur cette page

Exemple

#
JavaScript
const scores = [70, 85, 90]
const corrected = scores.with(1, 95)

console.log(corrected)
console.log(scores)
console.log(scores.with(-1, 100))
Console
[70, 95, 90]
[70, 85, 90]
[70, 85, 100]

Définition et utilisation

#

La méthode with(index, value) est l’équivalent non mutant de l’affectation array[index] = value. Elle crée une copie du tableau, y remplace un élément et renvoie le résultat. L’original reste intact.

Elle gère les indices négatifs comme at() : with(-1, x) change le dernier élément de la copie. Un indice hors limites n’allonge pas le tableau, il lève une erreur RangeError, ce qui protège contre la création accidentelle d’emplacements vides.

Elle appartient à la famille des méthodes copiantes avec toSorted(), toReversed() et toSpliced(). Elle est surtout utile là où les données doivent rester immuables : dans l’état d’un composant React, dans des reducers Redux ou dans un historique avec une fonction « annuler ».

Syntaxe

#
Syntaxe
array.with(index, value)

Paramètres

#
  • index

    nombre entier

    Position de l’élément à remplacer. Les valeurs négatives comptent depuis la fin.
  • value

    valeur quelconque

    Nouvelle valeur de l’élément.

Plus d’exemples

#
Indice hors limites
JavaScript
const days = ['lun', 'mar', 'mer']

try {
  days.with(5, 'sam')
} catch (error) {
  console.log(error.name)
}

const copy = [...days]
copy[5] = 'sam'
console.log(copy.length)
Console
RangeError
6

Une affectation classique à l’indice 5 a allongé la copie à six éléments et y a laissé des emplacements vides. with() signale une erreur dans cette situation.

Mise à jour d’une tâche sans mutation
JavaScript
const todos = [
  { title: 'Quiz HTML', done: false },
  { title: 'Projet CSS', done: false }
]

const updated = todos.with(0, { ...todos[0], done: true })

console.log(updated[0])
console.log(todos[0])
Console
{ title: 'Quiz HTML', done: true }
{ title: 'Quiz HTML', done: false }

Compatibilité des navigateurs

#

Largement disponible · depuis 2023

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Pour changer un seul champ d’un objet dans un tableau, combinez with() avec le spread : list.with(i, { ...list[i], done: true }).
  • N’appelez pas with() dans une boucle pour changer plusieurs éléments. Chaque appel copie tout le tableau ; un seul map() est préférable.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.