Archived
📦 NEW: Ajout de la fonction sortArray
This commit is contained in:
1 parent
cd2f635ca3
commit
0db96aaeb9
3 files changed
+61
-2
No files matched your search
+2
-1
@@ -25,4 +25,5 @@ INSERT INTO `functions` (`id`, `title`, `slug`, `description`, `image`, `type`,
|
||||
(16, 'Les méthodes des tableaux', 'arrayMethods', 'Et si on refaisait les méthodes natives de l\'objet global \"Array\" ?', '/images/functions/arrayMethods.png', 'article', '<p><strong>JavaScript</strong> est un langage <strong>orienté objet</strong>, chaque type comme \"String\", \"Number\", ... sont en réalité des objets. <br>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCe sont des \"<a target=\"_blank\" href=\"https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux\">Objets globaux</a>\", qui dispose de méthodes bien utiles. 😎 Pourquoi je vous dit ça ?<br>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCar aujourd\"hui nous allons reproduire les méthodes de l\"objet global \"<a target=\"_blank\" href=\"https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array\">Array</a>\", c\"est un bon exercice pour progresser.<br>\n<br>\n\n\n\n\n\n\n\n\n\n\n\nNous allons réaliser une classe (syntaxe ES6+) qu\"on va appeler \"DivloArray\" par exemple et reproduire 6 méthodes (push, forEach, map, filter, reverse et join), bien évidemment libre à vous d\"en faire plus. 😊 Je vais expliquer le code une méthode après l\"autre donc bout de code par bout de code, si vous voulez avoir le code source complet, il est disponible sur ce <a target=\"_blank\" href=\"https://gist.github.com/Divlo/4ffc8ed007d293372ee449d2647fcad9\">GitHub Gist.</a><br>\n<br>\n\n\n\n\n\n\n\n\n\n\nDonc tout d\"abord, nous devons créer la classe avec un constructor et faire une nouvelle instance de cet objet dans une variable :<br>\n\n\n\n\n\n\n\n\n(Libre à vous de renommer les variables comme bon vous semble.) <br>\n</p><div class=\"vscode-editor\" style=\"color: #d4d4d4;background-color: #1e1e1e;font-family: Consolas, \'Courier New\', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;\"><div><span style=\"color: #569cd6;\">class</span><span style=\"color: #d4d4d4;\"> </span><span style=\"color: #4ec9b0;\">DivloArray</span><span style=\"color: #d4d4d4;\"> {</span></div><div><span style=\"color: #d4d4d4;\"> </span><span style=\"color: #569cd6;\">constructor</span><span style=\"color: #d4d4d4;\">(</span><span style=\"color: #9cdcfe;\">array</span><span style=\"color: #d4d4d4;\">) {</span></div><div><span style=\"color: #d4d4d4;\"> </span><span style=\"color: #569cd6;\">this</span><span style=\"color: #d4d4d4;\">.</span><span style=\"color: #9cdcfe;\">array</span><span style=\"color: #d4d4d4;\"> = </span><span style=\"color: #9cdcfe;\">array</span><span style=\"color: #d4d4d4;\">;</span></div><div><span style=\"color: #d4d4d4;\"> }</span></div><div><span style=\"color: #d4d4d4;\">}</span></div><br>\n\n<div><span style=\"color: #569cd6;\">const</span><span style=\"color: #d4d4d4;\"> </span><span style=\"color: #9cdcfe;\">divloArray</span><span style=\"color: #d4d4d4;\"> = </span><span style=\"color: #569cd6;\">new</span><span style=\"color: #d4d4d4;\"> </span><span style=\"color: #4ec9b0;\">DivloArray</span><span style=\"color: #d4d4d4;\">([</span><span style=\"color: #b5cea8;\">57</span><span style=\"color: #d4d4d4;\">, </span><span style=\"color: #b5cea8;\">4</span><span style=\"color: #d4d4d4;\">, </span><span style=\"color: #b5cea8;\">2</span><span style=\"color: #d4d4d4;\">, </span><span style=\"color: #b5cea8;\">8</span><span style=\"color: #d4d4d4;\">, </span><span style=\"color: #b5cea8;\">16</span><span style=\"color: #d4d4d4;\">, </span><span style=\"color: #b5cea8;\">25</span><span style=\"color: #d4d4d4;\">]);</span></div></div><p><br>\n\n\n\n\n\n\n- Nous allons commencer par créer la première méthode très utilisée qui consiste à ajouter un ou plusieurs éléments à la fin d\"un tableau, je parle bien évidemment de la méthode <strong>push</strong>.</p><div class=\"vscode-editor\" style=\"color: #d4d4d4;background-color: #1e1e1e;font-family: Consolas, \'Courier New\', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;\"><div><span style=\"color: #6a9955;\">/**</span></div><div><span style=\"color: #6a9955;\"> * </span><span style=\"color: #569cd6;\">@description</span><span style=\"color: #6a9955;\"> Ajoute un ou plusieurs éléments à la fin d\"un tableau et retourne la nouvelle taille du tableau.</span></div><div><span style=\"color: #6a9955;\"> * </span><span style=\"color: #569cd6;\">@param</span><span style=\"color: #6a9955;\"> </span><span style=\"color: #4ec9b0;\">{*}</span><span style=\"color: #6a9955;\"> </span><span style=\"color: #9cdcfe;\">elements</span><span style=\"color: #6a9955;\"> Éléments à ajoutés</span></div><div><span style=\"color: #6a9955;\"> * </span><span style=\"color: #569cd6;\Line truncated
|
||||
(17, 'Est-ce un palindrome ?', 'isPalindrome', 'Un palindrome est un mot (ou phrase) qui peut s\'écrire dans les deux sens (ex: kayak).', '/images/functions/isPalindrome.png', 'form', NULL, '[{\"name\": \"string\", \"type\": \"text\", \"label\": \"Entrez la chaîne de caractères à vérifier :\", \"placeholder\": \"(e.g : kayak)\"}]', 1, '2020-05-06 20:16:41', '2020-05-07 09:32:02', 2),
|
||||
(18, 'Quel est le mot le plus long ?', 'findLongestWord', 'Trouve le mot le plus long dans une chaîne de caractères.', '/images/functions/findLongestWord.png', 'form', NULL, '[{\"name\": \"string\", \"type\": \"text\", \"label\": \"Entrez la chaîne de caractères (phrase) à vérifier :\", \"placeholder\": \"(e.g : Une phrase quelconque.)\"}]', 1, '2020-05-06 20:29:05', '2020-05-07 13:31:30', 2),
|
||||
(19, 'Suite de Fibonacci', 'fibonacci', 'Calcule la suite de Fibonacci.', '/images/functions/fibonacci.png', 'form', NULL, '[{\"name\": \"counter\", \"type\": \"integer\", \"label\": \"Combien de nombres de la suite de fibonacci voulez vous calculer ?\", \"placeholder\": \"(e.g : 14)\"}]', 1, '2020-05-06 20:43:21', '2020-05-07 14:00:09', 2);
|
||||
(19, 'Suite de Fibonacci', 'fibonacci', 'Calcule la suite de Fibonacci.', '/images/functions/fibonacci.png', 'form', NULL, '[{\"name\": \"counter\", \"type\": \"integer\", \"label\": \"Combien de nombres de la suite de fibonacci voulez vous calculer ?\", \"placeholder\": \"(e.g : 14)\"}]', 1, '2020-05-06 20:43:21', '2020-05-07 14:00:09', 2),
|
||||
(20, 'Trie les éléments d\'un tableau', 'sortArray', 'Trie les éléments d\'un tableau dans l\'ordre croissant.', '/images/functions/sortArray.png', 'form', NULL, '[{\"name\": \"numbersList\", \"type\": \"text\", \"label\": \"Entrez une liste de nombres (séparées par des virgules) :\", \"placeholder\": \"(e.g : 4, 12, 1, 8)\"}]', 1, '2020-05-06 20:57:48', '2020-05-07 14:42:56', 2);
|
||||
@@ -14,6 +14,7 @@ const rightPriceOutput = require('./main/rightPrice');
|
||||
const isPalindromeOutput = require('./main/isPalindrome');
|
||||
const findLongestWordOutput = require('./main/findLongestWord');
|
||||
const fibonacciOutput = require('./main/fibonacci');
|
||||
const sortArrayOutput = require('./main/sortArray');
|
||||
|
||||
const functionObject = {
|
||||
randomNumber : randomNumberOutput,
|
||||
@@ -31,7 +32,8 @@ const functionObject = {
|
||||
rightPrice : rightPriceOutput,
|
||||
isPalindrome : isPalindromeOutput,
|
||||
findLongestWord : findLongestWordOutput,
|
||||
fibonacci : fibonacciOutput
|
||||
fibonacci : fibonacciOutput,
|
||||
sortArray : sortArrayOutput,
|
||||
};
|
||||
|
||||
// Choisi la fonction à exécuter
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
const errorHandling = require('../../utils/errorHandling');
|
||||
const { requiredFields } = require('../../config/errors');
|
||||
const formatNumberResult = require('../secondary/formatNumberResult');
|
||||
|
||||
function minNumber(array) {
|
||||
let minNumber = { index: 0, value: array[0] }
|
||||
for (let index = 1; index < array.length; index++) {
|
||||
const number = array[index];
|
||||
if (number < minNumber.value) {
|
||||
minNumber = { index: index, value: array[index] }
|
||||
}
|
||||
}
|
||||
return minNumber;
|
||||
}
|
||||
|
||||
function sortArray(array) {
|
||||
const arrayDuplicated = [...array];
|
||||
const resultArray = [];
|
||||
while (array.length !== resultArray.length) {
|
||||
const min = minNumber(arrayDuplicated);
|
||||
resultArray.push(min.value);
|
||||
arrayDuplicated.splice(min.index, 1);
|
||||
}
|
||||
return resultArray;
|
||||
}
|
||||
|
||||
/* OUTPUTS */
|
||||
module.exports = sortArrayOutput = ({ res, next }, argsObject) => {
|
||||
let { numbersList } = argsObject;
|
||||
|
||||
// S'il n'y a pas les champs obligatoire
|
||||
if (!(numbersList)) {
|
||||
return errorHandling(next, requiredFields);
|
||||
}
|
||||
|
||||
const numbersListArray = numbersList.split(',').map((number) => number.trim().replace(' ', '')).map(Number);
|
||||
|
||||
// Si ce n'est pas une liste de nombres
|
||||
if (numbersListArray.includes(NaN)) {
|
||||
return errorHandling(next, { message: "Vous devez rentrer une liste de nombres séparée par des virgules valide.", statusCode: 400 });
|
||||
}
|
||||
|
||||
// Si la taille du tableau dépasse LIMIT_ARRAY_LENGTH
|
||||
const LIMIT_ARRAY_LENGTH = 31;
|
||||
if (numbersListArray.length >= LIMIT_ARRAY_LENGTH) {
|
||||
return errorHandling(next, { message: `Par souci de performance, vous ne pouvez pas exécuter cette fonction avec une liste de nombres dépassant ${LIMIT_ARRAY_LENGTH - 1} nombres.`, statusCode: 400 });
|
||||
}
|
||||
|
||||
const result = sortArray(numbersListArray);
|
||||
const resultFormatted = result.map((number) => formatNumberResult(number));
|
||||
return res.status(200).json({
|
||||
result,
|
||||
resultFormatted,
|
||||
resultHTML: `<p>La liste de nombres dans l'ordre croissant :<br/> ${resultFormatted.join(', ')}</p>`
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user