Aller au contenu

Javascript • Tableaux

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.

Mixed Array
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.

Shapes Array
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: "" },
];
idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.map()
const hearts = shapes.map(shape => shape.heart);
💙
🧡
💜
💛
💚
🤍
Array.prototype.map()
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.

projectionFn()
type projectionFn = (value: any, index: number, array: any[]) => any;
  • value : valeur de l’élément du tableau initial
  • index (facultatif) : index de l’élément du tableau initial
  • array (facultatif) : tableau initial
  • ⇒ nouvel élément qui sera ajouté au nouveau tableau

Équivalence LINQ .NET : Select()

idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.filter()
const filteredArray = shapes.filter(shape =>
shape.circle === "🟠" || shape.square === "🟩"
);
idcircleheartsquare
orange🟠🧡🟧
green🟢💚🟩
Array.prototype.filter()
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.

predicateFn()
type predicateFn = (value: any, index: number, array: any[]) => boolean
  • value : valeur de l’élément du tableau initial
  • index (facultatif) : index de l’élément du tableau initial
  • array (facultatif) : tableau initial
  • ⇒ true si l’élément respecte la condition, sinon false

Équivalence LINQ .NET : Where()

idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.find()
// → { id: "yellow", circle: "🟡", heart: "💛", square: "🟨" }
const foundElement = shapes.find(shape => shape.heart === "💛");
Array.prototype.find()
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.

predicateFn()
type predicateFn = (value: any, index: number, array: any[]) => boolean
  • value : valeur de l’élément du tableau initial
  • index (facultatif) : index de l’élément du tableau initial
  • array (facultatif) : tableau initial
  • ⇒ true si l’élément respecte la condition, sinon false

Équivalence LINQ .NET : FirstOrDefault()

idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.some()
// → true
const hasWhiteCircle = shapes.some(shape => shape.circle === "");
// → false
const hasBlackSquare = shapes.some(shape => shape.square === "");
Array.prototype.some()
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.

predicateFn()
type predicateFn = (value: any, index: number, array: any[]) => boolean
  • value : valeur de l’élément du tableau initial
  • index (facultatif) : index de l’élément du tableau initial
  • array (facultatif) : tableau initial
  • ⇒ true si l’élément respecte la condition, sinon false

Équivalence LINQ .NET : Any()

idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.every()
// true
const allNotEmptyHeart = shapes.every(shape => shape.heart != "");
// → false
const allPurpleCircle = shapes.every(shape => shape.circle === "🟣");
Array.prototype.every()
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.

predicateFn()
type predicateFn = (value: any, index: number, array: any[]) => boolean
  • value : valeur de l’élément du tableau initial
  • index (facultatif) : index de l’élément du tableau initial
  • array (facultatif) : tableau initial
  • ⇒ true si l’élément respecte la condition, sinon false

Équivalence LINQ .NET : All()

idcircleheartsquare
blue🔵💙🟦
orange🟠🧡🟧
purple🟣💜🟪
yellow🟡💛🟨
green🟢💚🟩
white🤍
.sort()
shapes.sort((a,b) => a.id.localeCompare(b.id));
idcircleheartsquare
blue🔵💙🟦
green🟢💚🟩
orange🟠🧡🟧
purple🟣💜🟪
white🤍
yellow🟡💛🟨
Array.prototype.sort()
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.

compareFn()
type compareFn = (a: any, b: any) => number
  • a : valeur du premier élément
  • b : valeur du second élément
  • ⇒ un nombre qui :
    • est positif si a vient avant b (a → b) ;
    • est négatif si a vient après b (b → a) ;
    • est égal à zéro ou NaN si a et b sont considérés comme identiques.

Ainsi la fonction de comparaison :

  • (a, b) => a - b permet de trier des nombres dans l’ordre croissant ;
  • (a, b) => b - a permet de trier des nombres dans l’ordre décroissant.

Équivalence LINQ .NET :

Javascript.NET
mapSelect
filterWhere
findFirstOrDefault
someAny
everyAll
sort, toSortedOrderBy, OrderByDescending

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.