- 1 1. Introduction
- 2 2. Comprendre les fonctionnalités de tri natives de JavaScript
- 3 3. Exemple d’implémentation : tri d’un tableau HTML
- 4 4. Tri par glisser-déposer avec SortableJS
- 5 5. Tableau de comparaison : Bibliothèques tierces vs Implémentation native
- 6 6. Conseils de mise en œuvre et dépannage
- 7 7. Questions fréquemment posées (FAQ)
- 7.1 Q1 : Pourquoi la fonction de tri du tableau ne fonctionne-t-elle pas ?
- 7.2 Q2 : Le glisser‑déposer ne répond pas. Que faire ?
- 7.3 Q3 : Comment enregistrer l’ordre trié sur le serveur ?
- 7.4 Q4 : Comment améliorer les performances ?
- 7.5 Q5 : Le tri peut-il être combiné avec des fonctionnalités supplémentaires ?
- 8 8. Conclusion
1. Introduction
La fonctionnalité de tri basée sur JavaScript est extrêmement utile pour gérer dynamiquement les données dans les tableaux et les listes.
Dans cet article, nous expliquons de manière exhaustive tout, des fonctionnalités de tri natives de JavaScript aux implémentations intuitives de glisser‑déposer.
En lisant cet article, vous serez capable de :
- Comprendre comment trier des tableaux en utilisant les fonctionnalités standard de JavaScript.
- Implémenter une fonctionnalité de tri pour les tableaux HTML et les listes.
- Mettre en place un tri par glisser‑déposer avec SortableJS.
- Acquérir des compétences pratiques applicables à des projets réels grâce à des exemples et des cas d’utilisation.
Nous parcourrons chaque sujet étape par étape, alors suivez bien le guide et essayez d’implémenter les exemples vous‑même.
2. Comprendre les fonctionnalités de tri natives de JavaScript
2.1 Méthodes de tri de base
En JavaScript, vous pouvez trier facilement les données d’un tableau grâce aux fonctions de tri intégrées.
Cette section explique tout, de l’utilisation de base aux exemples avancés, avec des extraits de code complets.
Exemple de tri de chaînes
const fruits = ["banana", "apple", "orange", "grape"];
fruits.sort();
console.log(fruits);
// Output: ["apple", "banana", "grape", "orange"]
Exemple de tri numérique
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => a - b); // Ascending order
console.log(numbers);
// Output: [1, 5, 10, 25, 40, 100]
Lors du tri de nombres, il est important d’utiliser une fonction de comparaison.
Sans cela, les valeurs sont triées lexicalement (comme des chaînes), ce qui peut entraîner des résultats inattendus.
2.2 Exemples avancés utilisant des fonctions de comparaison personnalisées
Lors du tri de tableaux d’objets, vous pouvez trier en fonction d’une propriété spécifique.
Exemple de tri d’un tableau d’objets
const users = [
{ name: "Yamada", age: 30 },
{ name: "Tanaka", age: 25 },
{ name: "Suzuki", age: 35 }
];
// Sort by age
users.sort((a, b) => a.age - b.age);
console.log(users);
/* Output:
[
{ name: "Tanaka", age: 25 },
{ name: "Yamada", age: 30 },
{ name: "Suzuki", age: 35 }
]
*/
Comme le montre l’exemple ci‑dessus, l’utilisation d’une fonction de comparaison vous permet de mettre en œuvre une logique de tri hautement personnalisée.
2.3 Conseils d’optimisation des performances
Lorsque vous travaillez avec de grands ensembles de données, prenez en compte les points suivants :
Optimiser les fonctions de comparaison * Évitez les calculs lourds à l’intérieur des fonctions de comparaison.
Réduire la quantité de données à trier * Filtrez les données inutiles avant d’effectuer le tri.
Utiliser les Web Workers * Exécutez les opérations de tri en arrière‑plan pour améliorer les performances globales.

3. Exemple d’implémentation : tri d’un tableau HTML
3.1 Fonctionnalité de tri de tableau de base
Ici, nous implémenterons une fonctionnalité en JavaScript qui trie les données d’un tableau HTML en cliquant sur l’en‑tête d’une colonne.
Code HTML
<table id="data-table">
<thead>
<tr>
<th onclick="sortTable(0)">Name</th>
<th onclick="sortTable(1)">Age</th>
</tr>
</thead>
<tbody>
<tr><td>Yamada</td><td>30</td></tr>
<tr><td>Tanaka</td><td>25</td></tr>
<tr><td>Suzuki</td><td>35</td></tr>
</tbody>
</table>
Code JavaScript
function sortTable(columnIndex) {
const table = document.getElementById("data-table");
const rows = Array.from(table.rows).slice(1); // Exclude the header row
rows.sort((rowA, rowB) => {
const cellA = rowA.cells[columnIndex].innerText;
const cellB = rowB.cells[columnIndex].innerText;
// Detect whether values are numeric or strings, then sort accordingly
return isNaN(cellA) || isNaN(cellB)
? cellA.localeCompare(cellB)
: cellA - cellB;
});
// Re-render after sorting
rows.forEach(row => table.tBodies[0].appendChild(row));
}
Il s’agit d’une implémentation simple qui vous permet de trier chaque colonne simplement en cliquant.
3.2 Exemple avancé combiné avec le filtrage
En combinant le tri avec le filtrage, vous pouvez également trier les résultats de recherche en temps réel.
Exemple de code JavaScript
document.getElementById("filter-input").addEventListener("input", (e) => {
const filter = e.target.value.toLowerCase();
const rows = document.querySelectorAll("#data-table tbody tr");
rows.forEach(row => {
const text = row.innerText.toLowerCase();
row.style.display = text.includes(filter) ? "" : "none";
});
});
Cela active une fonctionnalité permettant aux utilisateurs de rechercher et de trier les données en même temps.
4. Tri par glisser-déposer avec SortableJS
4.1 Qu’est-ce que SortableJS ?
SortableJS est une bibliothèque JavaScript qui facilite la mise en œuvre du réordonnancement par glisser-déposer pour les éléments HTML.
Elle possède les fonctionnalités suivantes :
- Interactions intuitives par glisser-déposer .
- Très personnalisable , et peut être appliquée aux listes et aux tableaux.
- Adaptée aux mobiles , supportant les opérations basées sur le toucher.
- Légère sans dépendances , offrant d’excellentes performances.
4.2 Installation et configuration de base pour SortableJS
4.2.1 Étapes d’installation
Utilisation d’un CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.14.0/Sortable.min.js"></script>
Utilisation de npm (pour un environnement Node.js)
npm install sortablejs
4.2.2 Configuration de base
À l’aide du code HTML et JavaScript suivant, vous pouvez implémenter le tri par glisser-déposer.
Code HTML
<ul id="sortable-list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
Code JavaScript
document.addEventListener("DOMContentLoaded", () => {
const list = document.getElementById("sortable-list");
new Sortable(list, {
animation: 150, // Animation speed (milliseconds)
ghostClass: "sortable-ghost" // Class applied to the element while dragging
});
});
CSS (Optionnel)
.sortable-ghost {
opacity: 0.5;
background: #f0f0f0;
}
4.3 Exemple avancé : Glisser-déposer entre plusieurs listes
Code HTML
<div>
<ul id="list1">
<li>Item A</li>
<li>Item B</li>
</ul>
<ul id="list2">
<li>Item C</li>
<li>Item D</li>
</ul>
</div>
Code JavaScript
document.addEventListener("DOMContentLoaded", () => {
const list1 = document.getElementById("list1");
const list2 = document.getElementById("list2");
new Sortable(list1, {
group: "shared", // Set the group name
animation: 150
});
new Sortable(list2, {
group: "shared", // Use the same group name
animation: 150
});
});

5. Tableau de comparaison : Bibliothèques tierces vs Implémentation native
5.1 Tableau de comparaison
| Feature / Characteristic | Native Implementation | SortableJS |
|---|---|---|
| Code simplicity | Short and simple (basic sorting only) | Slightly more complex (supports advanced features) |
| Drag & drop support | ✕ Not supported | ◯ Fully supported (including multi-list movement) |
| Performance | ◯ Fast (uses native functions) | ◯ Fast (optimized internally) |
| Customizability | △ Limited via comparison functions | ◯ Highly flexible with advanced options |
| Mobile support | ✕ Requires manual touch support | ◯ Mobile-friendly by default |
| Dependencies | ✕ None | ◯ Required (external library) |
| Implementation difficulty | ◯ Beginner-friendly | △ Slightly challenging for beginners |
| Advanced use cases (server sync, etc.) | △ Requires custom implementation | ◯ Easy with rich examples |
| Learning cost | ◯ Basic JavaScript knowledge is sufficient | △ Requires reading documentation |
5.2 Quand l’implémentation native est le meilleur choix
Avantages
- Aucune dépendance , donc aucune bibliothèque externe n’est requise.
- Rapide à implémenter avec un code court, idéal pour les fonctionnalités de tri simples .
- Hautes performances , adaptées même pour de grands ensembles de données.
Inconvénients
- Pas de support pour le glisser-déposer , nécessitant un travail supplémentaire pour l’interaction visuelle.
- La personnalisation avancée ou le support multi-listes nécessite une implémentation supplémentaire ou des bibliothèques .
Cas d’utilisation
- Lorsque vous devez trier des tableaux HTML statiques ou des tableaux .
- Projets qui priorisent les performances et une fonctionnalité minimale.
5.3 Quand SortableJS est le meilleur choix
Avantages
- Glisser-déposer intégré pour une interaction visuelle intuitive.
- Supporte le mouvement multi-listes et la synchronisation serveur .
- Prêt pour mobile par défaut , incluant le support tactile.
- Très personnalisable et bien adapté aux environnements de production.
Inconvénients
- Nécessite l’ajout d’une bibliothèque , augmentant légèrement la taille du projet.
- La complexité du code peut augmenter, entraînant un coût d’apprentissage plus élevé .
- Problèmes potentiels de dépendances ou de configuration dans certains environnements.
Cas d’utilisation
- Lorsque vous avez besoin de listes dynamiques ou de fonctionnalité de glisser-déposer .
- Designs d’UI qui nécessitent déplacer des éléments entre plusieurs listes ou sauvegarder l’ordre en temps réel .
6. Conseils de mise en œuvre et dépannage
6.1 Optimisation des performances
1. Gestion de grands ensembles de données
Le tri de grands ensembles de données peut entraîner une dégradation des performances.
Solutions
- Utiliser le défilement virtuel
const visibleItems = items.slice(startIndex, endIndex); renderItems(visibleItems);
- Exploiter le traitement asynchrone Exécuter la logique de tri dans des Web Workers pour garder l’interface réactive.
2. Minimiser les opérations DOM
Le tri implique souvent des manipulations fréquentes du DOM, il est donc crucial de réduire les reflows inutiles.
Solution
- Utiliser DocumentFragment
const fragment = document.createDocumentFragment(); rows.forEach(row => fragment.appendChild(row)); table.appendChild(fragment);
6.2 Améliorer l’accessibilité et la convivialité
1. Support de la navigation au clavier
Fournir des alternatives au clavier pour les utilisateurs qui ne peuvent pas utiliser le glisser‑déposer.
Solution
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowUp') {
moveItemUp();
} else if (e.key === 'ArrowDown') {
moveItemDown();
}
});
2. Améliorations du retour visuel
Ajouter des repères visuels pour indiquer clairement les actions de tri.
Exemple CSS
.sortable-ghost {
opacity: 0.5;
border: 2px dashed #007BFF;
}
6.3 Guide de gestion des erreurs et de débogage
1. Erreur : le tri ne fonctionne pas
Cause 1 : Sélecteur incorrect
const list = document.getElementById("sortable-list");
if (!list) {
console.error("Element not found. Please check the ID.");
}
Cause 2 : Conflits d’événements
list.removeEventListener('click', handler);
6.4 Liste de contrôle de dépannage
- Vérifier les erreurs JavaScript dans la console
- Utilisez l’onglet Console des outils de développement pour identifier les problèmes.
- Vérifier les formats de données
Validez les structures de données utilisées dans le tri et la communication avec le serveur. 1. Confirmer les versions des bibliothèques
Assurez-vous que toutes les bibliothèques et dépendances sont à jour.

7. Questions fréquemment posées (FAQ)
Q1 : Pourquoi la fonction de tri du tableau ne fonctionne-t-elle pas ?
R1 : Veuillez vérifier les points suivants.
- Sélecteur incorrect
const table = document.getElementById("data-table");
- Faire la distinction entre nombres et chaînes
rows.sort((a, b) => Number(a) - Number(b));
- Conflits d’événements D’autres scripts JavaScript ou plugins peuvent attacher des événements aux mêmes éléments.
Q2 : Le glisser‑déposer ne répond pas. Que faire ?
R2 : Vérifiez les éléments suivants.
- Confirmer que SortableJS est chargé
console.log(Sortable);
- Vérifier la structure HTML
<ul id="sortable-list"> <li>Item 1</li> </ul>
- Vérifier les paramètres de prise en charge mobile
new Sortable(list, { touchStartThreshold: 5 });
- Configuration de groupe incorrecte
group: "shared"
Q3 : Comment enregistrer l’ordre trié sur le serveur ?
R3 : La synchronisation avec le serveur peut être facilement implémentée à l’aide d’AJAX.
Exemple JavaScript
const list = document.getElementById("sortable-list");
new Sortable(list, {
animation: 150,
onEnd: function () {
const items = Array.from(list.children).map(item => item.innerText);
fetch("/save-order", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ order: items })
})
.then(response => response.json())
.then(data => console.log("Saved successfully:", data))
.catch(error => console.error("Error:", error));
}
});
Q4 : Comment améliorer les performances ?
R4 : Envisagez les approches suivantes.
- Utiliser le défilement virtuel
const visibleItems = items.slice(startIndex, endIndex); renderItems(visibleItems);
- Utiliser les Web Workers Traiter les données en arrière‑plan pour améliorer la réactivité de l’interface.
- Optimiser la logique de tri
rows.sort((a, b) => a - b);
Q5 : Le tri peut-il être combiné avec des fonctionnalités supplémentaires ?
A5 : Oui, cela peut être facilement étendu comme indiqué ci-dessous.
- Combine with real-time filtering
Combiner avec un filtrage en temps réeldocument.getElementById("search").addEventListener("input", (e) => { const value = e.target.value.toLowerCase(); document.querySelectorAll("#sortable-list li").forEach(item => { item.style.display = item.innerText.toLowerCase().includes(value) ? "" : "none"; }); });
- Add and remove items dynamically
Ajouter et supprimer des éléments dynamiquementfunction addItem(text) { const list = document.getElementById("sortable-list"); const li = document.createElement("li"); li.textContent = text; list.appendChild(li); } function removeItem(index) { const list = document.getElementById("sortable-list"); list.removeChild(list.children[index]); }
8. Conclusion
8.1 Récapitulatif de l’article
1. Tri natif JavaScript
- Appris les techniques de tri de base en utilisant
Array.prototype.sort(). - Couvert le tri de tableaux d’objets avec des fonctions de comparaison et des stratégies d’optimisation des performances.
2. Tri de tableau HTML
- Présenté des exemples pratiques pour trier les données d’un tableau par colonne.
- Exploré des cas d’utilisation avancés combinés avec la fonctionnalité de filtrage.
3. Glisser‑déposer avec SortableJS
- Implémenté un tri par glisser‑déposer intuitif en utilisant SortableJS.
- Appris des approches flexibles incluant le déplacement multi‑listes et la synchronisation serveur.
4. Comparaison Natifs vs SortableJS
- Comparé les points forts et les cas d’utilisation pour aider à choisir la meilleure approche pour chaque projet.
5. Dépannage et FAQ
- Fournies des solutions aux problèmes courants et des conseils pour améliorer les performances et la fiabilité.
8.2 Prochaines étapes pratiques
La fonctionnalité de tri est un élément clé pour améliorer les interfaces dynamiques et la gestion des données.
Gardez les points suivants à l’esprit à mesure que vous progressez.
- Commencez par des implémentations simples, puis explorez des cas d’utilisation avancés
- Expérimentez la personnalisation du code
- Maîtrisez la gestion des erreurs et les techniques de débogage
- Améliorez continuellement les performances et l’utilisabilité
8.3 Passez à l’action
1. Essayez de le mettre en œuvre vous-même !
- Appliquez les exemples de code de cet article à vos propres projets et testez‑les en pratique.
- Partager votre code source sur GitHub et échanger des retours avec d’autres développeurs est également recommandé.
2. Continuez à améliorer vos compétences !
- Si vous souhaitez en savoir plus sur les fonctionnalités de tri, consultez les ressources officielles suivantes :
- Documentation officielle de SortableJS
- MDN Web Docs – Array.sort()
3. Consultez les articles associés
- Nous recommandons également des articles sur « Implémentation du filtrage JavaScript » et « Fondamentaux de la manipulation du DOM ».
8.4 Réflexions finales
La fonctionnalité de tri est essentielle pour organiser les données et améliorer l’expérience utilisateur.
Utilisez les techniques présentées dans cet article pour améliorer vos projets.
Si vous avez des questions sur la mise en œuvre de nouvelles fonctionnalités ou l’extension de ces exemples,
n’hésitez pas à nous contacter via la section des commentaires ou le formulaire de contact.
La prochaine étape est entre vos mains — commencez à expérimenter le code dès aujourd’hui !



