Archives Wild Code School
JavaScript

đŸ‘©â€đŸ« JS Basics 07bis - Les tableaux - Autres mĂ©thodes utiles

QuĂȘte 9 sur 11

Objectifs

Découvrir les méthodes des tableaux :

  • includes et indexOf pour dĂ©terminer l'existence ou l'emplacement d'une valeur dans un tableau.
  • join et split pour transformer un tableau en chaine de caractĂšres et vice-versa.
  • slice pour extraire une partie d'un tableau.
  • concat et splice pour ajouter/supprimer des elements.
  • reverse et sort pour rĂ©-ordonner les items.

Pré-requis

Avoir validĂ© la quĂȘte suivante :

QuĂȘtes liĂ©es

Introduction

Dans la quĂȘte prĂ©cĂ©dente, tu as appris comment crĂ©er des tableaux, accĂ©der Ă  leurs Ă©lĂ©ments et rĂ©cupĂ©rer leur taille. Tu as aussi pu voir que ces tableaux pouvaient ĂȘtre manipulĂ©s grĂące Ă  des mĂ©thodes telles que push, pop, shift et unshift. Durant cette quĂȘte, tu vas approfondir tes connaissances sur les tableaux en apprenant Ă  utiliser quelques mĂ©thodes de plus, qui te seront probablement utiles pour la suite.

Sommaire

Includes

includes retourne true si l'argument correspond à un élément du tableau ou false sinon.

js
const fruits = ["Kiwi", "Apple", "Pineapple"];
console.log(fruits.includes("Kiwi")); // true
console.log(fruits.includes("Banana")); // false

🔬 Fais une expĂ©rience

Regarde si le tableau contient la chaine "Lion" (avec un console.log).

js
const animals = ["Lion", "Monkey", "Tiger"];
Voir la solution
javascript
console.log(animals.includes("Lion")); // true

IndexOf

indexOf retournera la position (l'index) du premier élément dans le tableau qui correspond à l'argument. Cette fonction retourne -1 si et seulement si aucun élément ne correspond.

js
const fruits2 = ["Kiwi", "Apple", "Pineapple", "Kiwi"];
//                 0        1         2          3
console.log(fruits2.indexOf("Kiwi"));
// Will return 0 

🔬 Fais une expĂ©rience

En utilisant uniquement la méthode indexOf vue juste avant, essaie d'écrire ta propre version de la fonction includes qu'on appelera arrayIncludes et qui fonctionnera avec deux arguments au lieu d'un : Le premier sera un tableau arbitraire (array) et le second sera une valeur (value) à chercher dans le tableau. Comme la méthode originale includes, ta fonction devra renvoyer true quand la valeur est dans le tableau et false sinon.

js
function arrayIncludes(array, value) {

}
Voir la solution
javascript
function arrayIncludes(array, value) {
  return array.indexOf(value) !== -1;
}

Join

join transformera un tableau en chaine de caractÚres. Tu peux spécifier quel caractÚre utiliser en tant que séparateur :

js
const fruits = ["Kiwi", "Apple", "Pineapple"];
const fruitsString = fruits.join();
console.log(fruitsString);
// Kiwi,Apple,Pineapple

const fruitsString2 = fruits.join("-");
console.log(fruitsString2);
// Kiwi-Apple-Pineapple

const fruitsString3 = fruits.join("*");
console.log(fruitsString3);
// Kiwi*Apple*Pineapple

Split

C'est un peu l'opération inverse de join. split part d'une chaine de caractÚres pour former un tableau. On donne en argument le caractÚre permettant de séparer les éléments.

js
const fruitsString = "Kiwi,Apple,Pineapple"
const fruits = fruitsString.split(',');
console.log(fruits);
// [ 'Kiwi', 'Apple', 'Pineapple' ]

🔬 Fais une expĂ©rience

En utilisant split et join, essaie de transformer la chaine Wild_Code_School en Wild Code School en seulement une ligne de JS.

js
const withUnderscores = "Wild_Code_School";
//const withSpaces = ;
//console.log(withSpaces);
Voir la solution
javascript
const withSpaces = withUnderscores.split('_').join(' ');

Slice

La mĂ©thode slice peut ĂȘtre utilisĂ©e pour crĂ©er une copie d'un tableau ou pour obtenir un sous-tableau. Cette mĂ©thode accepte deux paramĂštres optionnels permettant de dĂ©limiter la partie du tableau que l'on souhaite extraire. Par exemple :

js
const fruits = ['pomme', 'banane', 'orange', 'kiwi', 'mangue'];

// Extraire du 2Úme élément (index 1) jusqu'à la fin
console.log(fruits.slice(1)); 
// Résultat : ['banane', 'orange', 'kiwi', 'mangue']

// Extraire du 2Úme (index 1) au 4Úme élément (index 4 exclus)
console.log(fruits.slice(1, 4)); 
// Résultat : ['banane', 'orange', 'kiwi']

// Extraire les 2 derniers éléments avec un index négatif
console.log(fruits.slice(-2)); 
// Résultat : ['kiwi', 'mangue']

// Copier tout le tableau
console.log(fruits.slice()); 
// Résultat : ['pomme', 'banane', 'orange', 'kiwi', 'mangue']

La méthode slice fonctionne aussi sur les chaßnes de caractÚres.

js
const texte = "Bonjour le monde";

// Extraire Ă  partir du caractĂšre 8
console.log(texte.slice(8)); 
// Résultat : "le monde"

// Extraire de l'index 0 Ă  7 (exclus)
console.log(texte.slice(0, 7)); 
// Résultat : "Bonjour"

// Extraire les 5 derniers caractĂšres
console.log(texte.slice(-5)); 
// Résultat : "monde"
Info

slice() ne modifie pas le tableau/string original

Splice

Attention

Attention Ă  ne pas confondre avec la mĂ©thode slice. Et oui, Ă  une lettre prĂšs, tu n'auras pas le mĂȘme rĂ©sultat !

Cette mĂ©thode peut ĂȘtre utilisĂ©e pour supprimer et/ou insĂ©rer de nouveaux Ă©lĂ©ments Ă  une position dĂ©finie dans un tableau.

Comme arguments, splice prend dans cet ordre :

  • L'index de l'Ă©lĂ©ment Ă  supprimer ou Ă  remplacer (obligatoire)
  • Le nombre total d'Ă©lĂ©ment(s) Ă  supprimer ou remplacer (optionnel)
  • Le nouvel Ă©lĂ©ment Ă  insĂ©rer (optionnel)
  • Le deuxiĂšme nouvel Ă©lĂ©ment Ă  insĂ©rer aprĂšs le premier (optionnel)
  • Tu peux en fait mettre un nombre infini d'Ă©lĂ©ments Ă  insĂ©rer dans le tableau en renseignant d'autres arguments.

Exemples

Gérer une liste de tùches

js
const taches = ['réunion', 'appeler client', 'rapport', 'pause café', 'emails'];

// Supprimer une tùche terminée à l'index 2
taches.splice(2, 1);
console.log(taches); 
// Résultat : ['réunion', 'appeler client', 'pause café', 'emails']

// Ajouter une nouvelle tùche urgente en début de liste
taches.splice(0, 0, 'URGENT: bug Ă  corriger');
console.log(taches); 
// Résultat : ['URGENT: bug à corriger', 'réunion', 'appeler client', 'pause café', 'emails']

Modifier des scores de jeu

js
const scores = [150, 200, 180, 220, 195];

// Remplacer le 3Ăšme score
scores.splice(2, 1, 250);
console.log(scores); 
// Résultat : [150, 200, 250, 220, 195]

// Supprimer les 2 derniers scores
scores.splice(-2);
console.log(scores); 
// Résultat : [150, 200, 250]

Gérer des participants à un événement

js
const participants = ['Alice', 'Bob', 'Charlie', 'David', 'Emma'];

// Bob et Charlie annulent, remplacés par Frank
participants.splice(1, 2, 'Frank');
console.log(participants); 
// Résultat : ['Alice', 'Frank', 'David', 'Emma']

// Ajouter 2 nouveaux participants aprĂšs Alice
participants.splice(1, 0, 'Sophie', 'Lucas');
console.log(participants); 
// Résultat : ['Alice', 'Sophie', 'Lucas', 'Frank', 'David', 'Emma']

Manipuler des dates

js
const mois = ['janvier', 'février', 'mars', 'juin', 'juillet'];

// Oups, on a oublié avril et mai !
mois.splice(3, 0, 'avril', 'mai');
console.log(mois); 
// Résultat : ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet']

Pour t'exercer Ă  utiliser splice, tu peux essayer de re-coder push, pop, shift, unshift avec !

Concat

concat fusionnera deux tableaux en un seul :

js
const equipeA = ['Alice', 'Bob', 'Charlie'];
const equipeB = ['David', 'Emma'];

const touteLequipe = equipeA.concat(equipeB);
console.log(touteLequipe); 
// Résultat : ['Alice', 'Bob', 'Charlie', 'David', 'Emma']

console.log(equipeA); 
// Résultat : ['Alice', 'Bob', 'Charlie'] (inchangé)

Reverse

reverse mettra les premiers éléments en dernier et les derniers en premier.

js
const playlist = ['Chanson A', 'Chanson B', 'Chanson C', 'Chanson D'];

playlist.reverse();
console.log(playlist); 
// Résultat : ['Chanson D', 'Chanson C', 'Chanson B', 'Chanson A']

Sort

Si tu veux trier les éléments d'un tableau, tu peux utiliser la méthode sort :

js
const fruits2 = ["Kiwi", "Apple", "Pineapple", "Kiwi"];
console.log(fruits2.sort());
// ["Apple", "Kiwi", "Kiwi", "Pineapple"]
Attention

Avec des nombres, le rĂ©sultat peut ĂȘtre un peu surprenant :

javascript
const numbers = [1, 20, 45, 2, 3, 5, 8];
console.log(numbers.sort());
// [1, 2, 20, 3, 45, 5, 8]

En effet, si tu appelle la mĂ©thode sort sans arguments, cette derniĂšre va convertir en interne les Ă©lĂ©ments du tableau en chaine de caractĂšre et faire un tri par ordre alphabĂ©tique. Si tu souhaites avec un tri dans l'ordre numĂ©rique, tu auras besoin de fournir un argument Ă  sort : il s'agit d'une fonction de rappel (callback function) qui indique comment les Ă©lĂ©ments doivent ĂȘtre ordonnĂ©s. Tu peux lire cette partie de la documentation pour plus d'informations.

js
const numbers = [1, 20, 45, 2, 3, 5, 8];
console.log(numbers.sort(function(a, b){
	return a - b;
}));

//syntaxe plus courte
console.log(numbers.sort((a, b) => a - b));

// [1, 2, 3, 5, 8, 20, 45]

Resources

↗
MDN - Array

Tu pourras découvrir ici l'intégralité des méthodes disponibles pour manipuler les tableaux

developer.mozilla.org

Challenge

Dans ce challenge, tu vas pouvoir pratiquer l'utilisation de méthodes communes sur les tableaux.

Tu vas démarrer avec cette chaine mystérieuse : iu@zfiz)!uzqzf!snoi??alutargnocze&gfuzyafzygfzmgfu%f

  • Utilise split pour la transformer en tableau, de maniĂšre Ă  ce que chaque lettre devienne un Ă©lĂ©ment (une chaine vide devrait ĂȘtre utilisĂ©e en tant que sĂ©parateur).
  • DĂ©coupe le tableau avec slice. tu dois extraire un sous tableau qui dĂ©bute Ă  partir du 15iĂšme (inclus) jusqu'au 32iĂšme Ă©lĂ©ment (exclu). Conseil : rappelle-toi que les index commencent Ă  0 !
  • Utilise splice pour remplacer 2 elements depuis l'index 5 par un unique Ă©lĂ©ment : la lettre t.
  • Inverse l'ordre des Ă©lĂ©ments avec reverse.
  • Avec join, re-transforme Ă  nouveau le tableau en chaine de caractĂšres (en utilisant une chaine vide en tant que sĂ©parateur).

Voici ton point de départ :

javascript
const mysteriousString = `iu@zfiz)!uzqzf!snoi??alutargnocze&gfuzyafzygfzmgfu%f`;
console.log('step 0 : ',  mysteriousString);

// step1 : split the myserious string it into an array, so that each letter becomes an item (the separator should be an empty string).
const step1 = mysteriousString; // TODO : change this line
console.log('step 1 : ', step1);

// step2 : get a slice of the array : take elements from the 15th included to the 32nd excluded (remember indexes start at 0 !)
const step2 = step1; // TODO : change this line
console.log('step 2 : ', step2);

// step3 : Splice the array to replace 2 elements from index 5 with only one element : the letter 't'
const step3 = step2.slice(); // making a copy
// TODO : call splice on step3 with the correct arguments
// step3.splice(...)
console.log('step 3 : ', step3);

// step4 : reverse the array
const step4 = step3; // TODO : change this line
console.log('step 4 : ', step4);

// step5 : each element of the array back into a string (the separator should be an empty string)
const step5 = step4; // TODO : change this line
console.log('step 5 : ', step5);

Poste ton code en solution quand tu auras terminé.

CritĂšres de validation

  • [ ] Les transformations successives ont Ă©tĂ© rĂ©alisĂ©es comme dĂ©crites dans les instructions
  • [ ] Les console.log ne sont pas modifiĂ©s
  • [ ] Le message final Ă  la derniĂšre Ă©tape a du sens

Ressources partagĂ©es sur cette quĂȘte