Ceci est une ancienne révision du document !
JavaScript
Memo
Traitement des chaînes de caractères
Remplacement des caractères spéciaux
function removeAccents (text) {
return text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
}
Traitement des tableaux
Tri multicritères
myArray.sort((a, b) => a.firstname.localeCompare(b.firstname) || a.lastname.localeCompare(b.lastname) || a.age - b.age)
Variante
myArray.sort((a, b) => {
const compFirstname = a.firstname.localeCompare(b.firstname)
const compLastname = a.lastname.localeCompare(b.lastname)
const compAge = a.age - b.age
return compFirstname || compLastname || compAge
})
Traitement des objets
Tri des clés
Object.keys(myObject).sort().reduce(
(obj, key) => {
obj[key] = myObject[key]
return obj
}, {}
)
Traitement des dates
Formatage
En javascript pur :
function formatDate (date) {
return `${date.getDate()}/${('0' + (date.getMonth() + 1)).slice(-2)}/${date.getFullYear()} ${date.getHours()}:${('0' + date.getMinutes()).slice(-2)}:${('0' + date.getSeconds()).slice(-2)}`
}
Gestion des appels successifs
Debounce
Appeler qu'une seule fois une fonction au début ou à la fin d'une succession de déclenchements d'un événement.
function debounce (delay, callback) {
var timeout = null
return function () {
if (timeout) {
clearTimeout(timeout)
}
var args = arguments
timeout = setTimeout(function () {
callback.apply(null, args)
timeout = null
}, delay)
}
}
window.onresize = debounce(250, function () {
console.log('e')
})
throttle
Exécuter une fonction de manière périodique durant la séquence de déclenchements.
function throttle(delay, callback) {
var previousCall = new Date().getTime()
return function () {
var time = new Date().getTime()
if ((time - previousCall) >= delay) {
previousCall = time
callback.apply(null, arguments)
}
}
}
window.onresize = throttle(250, function () {
console.log('e')
})
Manipulation du DOM
Attendre le chargement complet du DOM
window.readyHandlers = [];
window.ready = function ready(handler) {
window.readyHandlers.push(handler);
handleState();
};
window.handleState = function handleState () {
if (['interactive', 'complete'].indexOf(document.readyState) > -1) {
while(window.readyHandlers.length > 0) {
(window.readyHandlers.shift())();
}
}
};
document.onreadystatechange = window.handleState;
ready(function () {
// your code here
});
Attendre la présence d'un élément
function waitForElement (selector, callback) {
const wait = setInterval(function () {
const element = document.querySelector(selector);
if (element !== null) {
callback(element);
clearInterval(wait);
}
}, 100);
}