Javascript • Tableaux
Introduction
Section intitulée « Introduction »Dans cette série d’articles, nous allons faire un zoom sur les fonctionnalités de base de Javascript.
Cet article concerne les tableaux et les fonctions qui permettent de les manipuler.
Et comme ce blog traite aussi de .NET, nous verrons l’équivalent LINQ de chaque fonction.
Un tableau en Javascript est un type d’objet qui permet de stocker une collection d’éléments. Contrairement à .NET, ces éléments n’ont pas nécessairement le même type de données.
const mixedArray = [ "ABC", // string (x, y) => x + y, // function null, // null -123, // number undefined, // undefined { name: "Bob" }, // object [ 7, "X" ], // array { height: 16, width: 32 } // object];Afin de simplifier, nous allons utiliser comme base de travail le tableau suivant.
type Shape = { id: string, circle: string, heart: string, square: string,};
const shapes: Shape[] = [ { id: "blue", circle: "🔵", heart: "💙", square: "🟦" }, { id: "orange", circle: "🟠", heart: "🧡", square: "🟧" }, { id: "purple", circle: "🟣", heart: "💜", square: "🟪" }, { id: "yellow", circle: "🟡", heart: "💛", square: "🟨" }, { id: "green", circle: "🟢", heart: "💚", square: "🟩" }, { id: "white", circle: "⚪", heart: "🤍", square: "⬜" },];| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
const hearts = shapes.map(shape => shape.heart);| 💙 |
| 🧡 |
| 💜 |
| 💛 |
| 💚 |
| 🤍 |
En détail
Section intitulée « En détail »const newArray = arr.map(projectionFn);Array.prototype.map()
est une fonction qui retourne un nouveau tableau qui contient tous les éléments du tableau initial
transformés (ou projetés) par la fonction projectionFn.
type projectionFn = (value: any, index: number, array: any[]) => any;value: valeur de l’élément du tableau initialindex(facultatif) : index de l’élément du tableau initialarray(facultatif) : tableau initial- ⇒ nouvel élément qui sera ajouté au nouveau tableau
Équivalence LINQ .NET : Select()
filter()
Section intitulée « filter() »| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
const filteredArray = shapes.filter(shape => shape.circle === "🟠" || shape.square === "🟩");| id | circle | heart | square |
|---|---|---|---|
| orange | 🟠 | 🧡 | 🟧 |
| green | 🟢 | 💚 | 🟩 |
En détail
Section intitulée « En détail »const newArray = arr.filter(predicateFn);Array.prototype.filter()
est une fonction qui retourne un nouveau tableau qui contient uniquement les éléments du tableau initial
qui respectent la condition fixée par la fonction predicateFn.
type predicateFn = (value: any, index: number, array: any[]) => booleanvalue: valeur de l’élément du tableau initialindex(facultatif) : index de l’élément du tableau initialarray(facultatif) : tableau initial- ⇒
truesi l’élément respecte la condition, sinonfalse
Équivalence LINQ .NET : Where()
| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
// → { id: "yellow", circle: "🟡", heart: "💛", square: "🟨" }const foundElement = shapes.find(shape => shape.heart === "💛");En détail
Section intitulée « En détail »const foundElement = arr.find(predicateFn);Array.prototype.find()
est une fonction qui retourne le premier élément du tableau qui respecte la condition fixée par la fonction predicateFn.
Si aucun élément n’est validé par predicateFn alors la fonction retourne undefined.
type predicateFn = (value: any, index: number, array: any[]) => booleanvalue: valeur de l’élément du tableau initialindex(facultatif) : index de l’élément du tableau initialarray(facultatif) : tableau initial- ⇒
truesi l’élément respecte la condition, sinonfalse
Équivalence LINQ .NET : FirstOrDefault()
| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
// → trueconst hasWhiteCircle = shapes.some(shape => shape.circle === "⚪");
// → falseconst hasBlackSquare = shapes.some(shape => shape.square === "⬛");En détail
Section intitulée « En détail »const someElement = arr.some(predicateFn);Array.prototype.some()
est une fonction qui retourne true si au moins un élément du tableau respecte la condition fixée par la fonction predicateFn.
Si aucun élément n’est validé par predicateFn alors la fonction retourne false.
type predicateFn = (value: any, index: number, array: any[]) => booleanvalue: valeur de l’élément du tableau initialindex(facultatif) : index de l’élément du tableau initialarray(facultatif) : tableau initial- ⇒
truesi l’élément respecte la condition, sinonfalse
Équivalence LINQ .NET : Any()
| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
// trueconst allNotEmptyHeart = shapes.every(shape => shape.heart != "");
// → falseconst allPurpleCircle = shapes.every(shape => shape.circle === "🟣");En détail
Section intitulée « En détail »const everyElements = arr.every(predicateFn);Array.prototype.every()
est une fonction qui retourne true si tous les éléments du tableau respectent la condition fixée par la fonction predicateFn.
Si un élément (ou plus) n’est pas validé par predicateFn alors la fonction retourne false.
type predicateFn = (value: any, index: number, array: any[]) => booleanvalue: valeur de l’élément du tableau initialindex(facultatif) : index de l’élément du tableau initialarray(facultatif) : tableau initial- ⇒
truesi l’élément respecte la condition, sinonfalse
Équivalence LINQ .NET : All()
| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| yellow | 🟡 | 💛 | 🟨 |
| green | 🟢 | 💚 | 🟩 |
| white | ⚪ | 🤍 | ⬜ |
shapes.sort((a,b) => a.id.localeCompare(b.id));| id | circle | heart | square |
|---|---|---|---|
| blue | 🔵 | 💙 | 🟦 |
| green | 🟢 | 💚 | 🟩 |
| orange | 🟠 | 🧡 | 🟧 |
| purple | 🟣 | 💜 | 🟪 |
| white | ⚪ | 🤍 | ⬜ |
| yellow | 🟡 | 💛 | 🟨 |
En détail
Section intitulée « En détail »arr.sort(compareFn);Array.prototype.sort()
est une fonction qui tri le tableau en utilisant la fonction de comparaison compareFn.
Elle retourne une référence du tableau initial (trié). Ainsi, elle ne retourne pas un nouveau tableau.
type compareFn = (a: any, b: any) => numbera: valeur du premier élémentb: valeur du second élément- ⇒ un nombre qui :
- est positif si
avient avantb(a → b) ; - est négatif si
avient aprèsb(b → a) ; - est égal à zéro ou
NaNsiaetbsont considérés comme identiques.
- est positif si
Ainsi la fonction de comparaison :
(a, b) => a - bpermet de trier des nombres dans l’ordre croissant ;(a, b) => b - apermet de trier des nombres dans l’ordre décroissant.
Équivalence LINQ .NET :
Correspondances
Section intitulée « Correspondances »| Javascript | .NET |
|---|---|
| map | Select |
| filter | Where |
| find | FirstOrDefault |
| some | Any |
| every | All |
| sort, toSorted | OrderBy, OrderByDescending |
Conclusion
Section intitulée « Conclusion »Nous avons vu ensemble les principales fonctions de manipulation de tableau proposées par Javascript. Elles nous permettent d’effectuer les táches les plus courantes.