# Petit memo js ### Bonnes pratiques : #### Général - Variables en ``camelCase`` - Noms de fonctions ``explicites`` - Espaces autours des opérateurs ``=+-*/`` - Indentation à 3 espaces #### Spécifique IB : - Eviter champs formule en page de liste (ralentis le changement de la page) <b><span style="color:red">PLUS D'INFOS SUR LE WIKI</span></b> ← c'est pas un lien cliquable ### Fonctions utiles #### On ready : ```js $(function(){ console.log("Hello world") }) ``` #### Event listener : ```js $("#origine-0").on('event1 event2', () => { console.log("Hello") }) ``` Events : | Mouse | Keyboard | Form | Document/Window | |--------------|-----------------|-------------|-------------------------| | click | keypress | submit | load | | dblclick | keydown | change | resize | | mouseenter | keyup | focus | scroll | | mouseleave | | blur | unload | #### Array to associative array ```js function traiterResultatRequete(arrayChamps, arrayResult){ var res = {} for(var j=0; j<arrayChamps.length; j++){ res[arrayChamps[j]] = arrayResult[j] != null ? arrayResult[j] : ''; } return res } ``` ##### Exemple : ```js var champsARequeter = [ "id", "status", "clientNom", "clientPrenom", ]; rbf_selectQuery("SELECT "+champsARequeter.join(", ")+" FROM object WHERE id=12345",1000,function(res){ var resAssociative = traiterResultatRequete(champsARequeter, res); /* res : [ "12345", "V", "BON", "Jean" ] resAssociative : { "id": "12345", "status": "V", "clientNom": "BON", "clientPrenom": "Jean" } */ } ); ``` #### #### Object sort : ```js const personne = [ { "nom": "Dupont", "prenom": "Jean", "age": 25 }, { "nom": "Durand", "prenom": "Pierre", "age": 30 }, { "nom": "Cerise", "prenom": "Adèle", "age": 35 }, { "nom": "Fruit", "prenom": "Antoine", "age": 35 }, ] // Fonctionne aussi sur les nombres (ordre croissant) function triAlphabetique(arr, cle) { arr.sort(function (a, b) { if (a[cle] < b[cle]) { return -1; } if (a[cle] > b[cle]) { return 1; } return 0; }); return arr; } triAlphabetique(personne, "prenom"); // Return [ {"nom": "Dupont","prenom": "Jean","age": 25}, {"nom": "Durand","prenom": "Pierre","age": 30}, {"nom": "Cerise","prenom": "Adèle","age": 35}, {"nom": "Fruit","prenom": "Antoine","age": 35} ] ``` #### Easy set query result in var : ```js const query = 'SELECT id, firstName, lastName, email_utilise, email, mobilePhone, phone, R9999999 FROM collaborateur1 WHERE id=12345678' const collaborateur = await rbf_asyncSelectQuery(query, 1); const [id, firstName, lastName, email, emailUtilise, mobilePhone, phone, idRelation] = collaborateur[0]; /* * Evite de faire une ligne par variable * var id = collaborateur[0][0] * var firstName = collaborateur[0][1] * var lastName = collaborateur[0][2] * .... */ ``` #### No callback : ```js async function main(){ let resultatAwait = await new Promise(resolve => { setTimeout(() => { resolve("Hello"); }, 1000) }) console.log(resultatAwait); console.log("World") } main() ``` #### IIFE (solution alternative aux promise / callback dans boucle for) ```js const names = [ "John", "Paul", ] // Console log 2 undefined car au moment du timeout le for sera fini et i sera egal a 1 for(var i = 0; i < names.length; i++) { setTimeout(function() { console.log(names[i]) }, 1000) } // Solution, utiliser IIFE (Immediately Invoked Function Expression) for(var i = 0; i < names.length; i++) { ((name) => { setTimeout(function() { console.log(name) }, 1000) })(names[i]) } ```