Accueil

Traduction

Tutoriel sur JS natif, Vue.js, jQuery.js & Node.js

Tutoriel JavaScript - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

JavaScript : les tableaux

Dans ce chapitre je vais traiter des tableaux dans JS au sens large c'est à dire non seulement les tableaux indicés (Array) mais aussi les nouvelles structures : dictionnaires (Map) et ensembles (Set).
Dans les trois cas il s'agit de variables contenant plusieurs valeurs élémentaires ou plusieurs couples clé:valeur.

Les objets "array" ou tableaux indicés

En JavaScript on désigne par "array" une liste indicée de valeurs. Un Array peut être à une ou plusieurs dimensions.

Dans un tableau indicé (ou liste indicée) chaque valeur est repérée par son rang (ou indice).
Attention le premier terme a l'indice zéro !
L'indice d'un élément découle de l'ordre de saisie ; il n'est jamais saisi !.

Liste indicée : premier exemple

Nous allons nous familiariser avec la syntaxe en produisant des commandes dans la console.
Consigne : saisir les lignes précédées de ">".
Les autres lignes sont les réponses de la console.

Pour créer un tableau il faut que les différents éléments soient séparés par des virgules et le tout encadré par des parenthèses.

Après avoir créé un tableau indicé, j'ai appliqué différentes méthodes qui modifient le tableau.

Pour connaitre le nombre d'éléments d'un tableau il faut utiliser la propriété length
Pour afficher le contenu du tableau il suffit de saisir son nom.

Il existe d'autres méthodes que l'on peut appliquer à un tableau.

Programme manipulant une liste indicée

Nous allons voir les différentes techniques pour parcourir un tableau.

Le script

Ce tableau a initialement 4 items ayant respectivement les rangs 0 à 3.
Puis j'ajoute un élément en précisant son indice ... 6 ! Il s'agit alors d'un tableau avec 7 éléments dont deux non définis. Oui c'est possible, mais ce n'est pas conseillé.

Vous verrez plus loin qu'il y a une astuce pour afficher le contenu d'un tableau sans recourir à une boucle.
Il suffit de convertir le tableau en String et d'afficher cette chaine.

Le rendu du script

Programme de création et manipulation d'un tableau indicé - autre exemple

Un tableau indicé est un objet de type ARRAY. Donc pour créer un tableau je peux utiliser la syntaxe POO : var nomTableau = new Array()
Ce script a aussi pour objet de vous familiariser avec d'autres méthodes d'un objet array qui n'ont pas encore été abordées.

Le script

Dans ce script : un petit rappel sur des méthodes déjà présentées : push(), unshift(), sort(), reverse(). Mais il y a aussi des nouveautés ...

Je vous montre aussi dans ce script que la méthode includes() peut s'appliquer non seulement à objet de type Array mais aussi à un objet de type String.

Le rendu de ce script

De nouvelles méthodes que l'on peut appliquer à un objet Array

Chaque version de ECMAScript apporte de nouvelles méthodes pour les tableaux.
Il est vrai qu'il y avait un manque par rapport à d'autres langages (Python par exemple).

Le script

La méthode toString() appliquée à un tableau convertit cet objet en chaine de caractères.
Donc pour afficher un tableau il suffit d'afficher la chaine découlant de la conversion.
La méthode toString() est donc quasi équivalente à la méthode join() déjà citée.

De nombreuses méthodes applicables à un Array attendent en paramètre une fonction destinée à réaliser un traitement à chaque item de la liste.
Cette fonction de callback est en général une fonction anonyme.

Dans le script ci-dessus j'utilise deux méthodes qui utilisent une fonction de callback : filter() & map()
La méthode filter() retourne un nouveau tableau avec moins d'items que l'initial. Cette méthode réclame une fonction basée sur un test.
La méthode map() retourne un nouvelle liste avec autant d'items que l'initiale. La fonction de callback réalise en général une conversion.

Ne confondez pas la méthode map() applicable à un Array avec le constructeur Map() qui crée un dictionnaire. Voir plus loin dans ce chapitre.

Le rendu

Un tableau indicé construit à partir de variables

Il est possible de construire un tableau indicé à partir de variables simples.

Exemple

Il faut d'abord définir les variables élémentaires puis définir le tableau de variables.

Le rendu de ce script

Attention le tableau a été construit avec les valeurs initiales des variables. Le changement de valeurs dans ces variables n'est pas repercuté dans le tableau.

Tableau d'objets

Jusqu'à présent chaque élément du tableau indicé est une donnée élémentaire.
Mais rien n'interdit de produire un tableau qui contient des références à des objets.

Je n'en dit pas plus pour l'instant puisqu'il y a tout un chapitre sur la POO.
C'est donc dans ce chapitre que les tableaux d'objets sont traités.

Je vous communique le lien : Créer & manipuler ses propres objets

Un "array" à deux dimensions

Rien n'interdit de créer des tableaux indicés à deux dimensions.

Théme: l'ULCO (Université de La Côte d'Opale) est une université multipolaire : quatre sites. Des personnels doivent faire des déplacements entre ces différents pôles. Afin de les indemniser, il est important de connaitre les distance entre les pôles.

Tableau des distances

****calaisboulognedunkerquesaint omer
calais0344644
boulogne3407654
dunkerque4676047
saint omer4454470

Il s'agit d'un tableau à double entrée (plusieurs colonnes et plusieurs lignes).

Le script correspondant

Le script pour créer ce tableau indicé à deux dimensions et le manipuler est le suivant.

En fait un tableau à deux dimensions et un tableau indicé dont chaque élément est lui-même un tableau indicé.
Dans l'exemple le tableau principal comprend cinq sous-tableaux. Chaque sous-tableau comprend 5 éléments.

Des instructions méritent une explication :
...distance[1][2] : pour récupérer un élément il faut préciser ses deux indices : rang colonne, rang ligne.

Le rendu du script (qui s'exécute automatiquement)

Pourquoi les tableaux ?

L'utilisation de tableaux peut simplifier considérablement la programmation.

Thématique : En fonction du rang du mois (entier compris entre 1 et 12) le programme doit afficher le nom du mois correspondant.
Ainsi si vous saisissez l'entier 5, le programme doit retourner "mai", si vous saisissez 11, il affiche "novembre".

Solution sans tableau

Donc un code relativement lourd.

Solution avec un tableau

Astuce : le premier élément d'un tableau a l'indice 0 (et non pas 1) donc le tableau comprend 13 items et le premier item est une chaine vide.
Le script est beaucoup plus succinct grâce à l'emploi d'un tableau.

Le rendu (dans un nouvel onglet, pensez à le fermer ensuite)

Testez le code !

Tableaux avec clés (dictionnaires)

Les tableaux avec clés OU tableaux "clé:valeur" OU tableaux associatifs OU dictionnaires ça existe enfin dans JavaScript depuis : ECMAScript6.
Auparavant on pouvait simuler un tableau associatif en produisant un tableau d'objets.
Dans le jargon JS on parle de "map" pour désigner un tableau associatif. Dans un "map" on associe à chaque valeur non pas un indice mais une clé (une chaine).
A la différence de l'indice, la clé doit toujours être saisie !

Exemple de tableau "clé/valeur"

Pour créer un tableau associatif il faut utiliser le constructeur Map().
Exemple de script : ()

Commentaires

Pour créer un tableau "clé:valeur" il faut utiliser le constructeur Map().

La propriété size (et non pas length) indique le nombre de paires "clé-valeur" dans le tableau.

Pour parcourir un objet Map il faut utiliser la structure for (let ... of nomMap.méthode())

Le rendu

Les ensembles ou "set"

Si vous connaissez le langage Python, vous savez qu'il existe une structure de données qui s'appelle "set" ("ensemble" en français).
Dans une séquence de type "set" il ne peut y avoir de doublons.
La dernière version de JavaScript propose désormais ce type de données.

Script à produire

Commentaire

Pour créer un nouvel ensemble, il faut utiliser le constructeur Set().
La taille de l'ensemble est de 8 (l'ajout de 7 n'ayant pas été pris en compte) ; cependant il n'y a pas plantage du programme.

Pour parcourir un "set" on utilise la même syntaxe que pour un "map".
Notez qu'il existe aussi les méthodes has(),clear(), delete() (comme pour pour le type "map'). Par contre l'ajout d'un item se fait avec la méthode add() (et non pas set()) et on comprend pourquoi ...

La tentative d'ajout d'un 8 échoue puisque cette valeur existe déjà. La taille de l'ensemble fait désormais 13. Il ne peut jamais y avoir de doublons dans un ensemble.

Utilité de la structure set

Dans le script ci-dessous le joueur obtient une "main" de 5 cartes toutes différentes car cette "main" est stockée dans un tableau de type "set".
La simplicité du programme est dûe à l'emploi d'un objet de type "set" qui interdit les doublons.

Le code la page

La boucle FOR infinie va être exécutée au moins 5 fois.
Dans l'instruction ma_main = ma_main.add(carte) l'ajout à "ma_main" n'est pas automatique ; il se fait seulement si la valeur de "carte" n'existe pas encore dans "ma_main".
Si "ma_main" était un Array (et non pas un Set) le code serait beaucoup plus complexe ; vous devriez alors programmer des tests pour éviter les doublons dans la liste.

Le rendu

Actualisez la page pour afficher de nouveau le bouton de commande.

Pour vérifier si vous avez compris le code, créez une nouvelle version : tirage dans un jeu de 52 cartes et la "main" doit être une combinaison de 7 cartes toutes différentes.