# 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])
}
```