Mon code pour le tri des données de mon api ( j'ai un autre code pour afficher, pagination, chercher les films )
Code : Tout sélectionner
// -------------------- BOUTONS TRI --------------------
document.getElementById("tri-btn").addEventListener("click", e => { e.preventDefault(); triParAnnee(filteredFilms); });
document.getElementById("tri-a-z").addEventListener("click", e => { e.preventDefault(); triParNom(filteredFilms); });
document.getElementById("tri-recents-movies").addEventListener("click", e => { e.preventDefault(); RecentMovies(filteredFilms); });
document.getElementById("tri-popularity").addEventListener("click", e => { e.preventDefault(); triParPopularite(filteredFilms); });
// -------------------- Btn filtre-----------
const categoryFiltre = {
"Action" : [ "war", "fight", "fighting", "battle", "mission","gun", "guns", "soldier", "attack", "escape", "kill", "revenge"],
"Aventure" : [ "adventure", "journey", "quest", "island", "treasure", "expedition", "jungle", "voyage", "explorer"],
"Comedie" : [ "funny", "comedy", "laugh", "laughing", "humor", "humour", "joke", "crazy", "family"],
"Drame" : [ "drama", "life", "story", "tragedy", "family issues", "relationship", "emotional", "confilct"],
"Fantastique" : ["magic", "magical", "wizard", "dragon", "fairy", "feerie", "enchanted", "spell", "myth", "legend", "fantasy"],
"Horreur" : ["horror", "ghost","haunted", "demon", "possesion", "curse", "blood", "zombie", "nightmare"],
"Policier" : ["detective", "investigation", "crime", "police", "murder", "case", "suspect", "killer"],
"Science-fiction" : ["space", "alien", "future", "robot", "android", "galaxy", "technology", "artificial intelligence", "ia", "time travel"],
"Thriller" : ["suspense", "mystery", "dark", "pursuit" , "danger", "secret", "survival"]
};
const annneeFiltre = {
"0000-2000" : [0, 2000],
"2000-2010": [2000, 2010],
"2010-2020": [2010, 2020],
"2020-2025": [2020, 2025],
};
const ageFiltre = {
"10" : [0,10],
"12" : [0,12],
"16" : [0,16],
}
function assignCategory(movie) {
const text = ((movie["#TITLE"] || movie["#AKA"] || "") + " " + (movie["#PLOT"] || "")).toLowerCase();
for (const category in categoryFiltre) {
for (const keyword of categoryFiltre[category]) {
if (text.includes(keyword.toLowerCase())) return category;
}
}
return "Autre";
}
document.querySelectorAll(".annee-list li").forEach(li => {
li.addEventListener("click", () => {
const value = li.dataset.value;
let yearMin = 0;
let yearMax = Infinity;
if (annneeFiltre[value]) {
[yearMin, yearMax] = annneeFiltre[value];
} else {
filteredFilms = [...films];
displayPage(1);
createPagination(1);
return;
}
filteredFilms = films.filter(f => {
const y = Number(f.year);
return y >= yearMin && y <= yearMax;
});
filteredFilms.sort((a, b) => b.year - a.year);
current_page = 1;
displayPage(current_page);
createPagination(current_page);
});
})
// -------------------- FILTRAGE CATÉGORIE --------------------
document.querySelectorAll(".select-list li").forEach(li => {
li.addEventListener("click", () => {
const selectedCategory = li.dataset.value;
filteredFilms = films.filter(film => film.category === selectedCategory);
current_page = 1;
total_page = Math.ceil(filteredFilms.length / filmsPerPage);
displayPage(current_page);
createPagination(current_page);
});
});
// ----------------- ETOILES -------------------
function generateStarRating(score, scoreMax = 10, totalStar = 5) {
const numericScore = parseFloat(score) || 0;
const starsCount = (numericScore / scoreMax) * totalStar;
let stars = "";
for (let i = 1; i <= totalStar; i++) {
if (i <= starsCount) {
stars += "★";
} else if (i - 1 < starsCount && i > starsCount) {
stars += "☆";
} else {
stars += "☆";
}
}
return `<span class="star">${stars}</span>`;
}
const btnPopularity = document.getElementById("btnPopularity"); // Assure-toi que l'ID existe
btnPopularity.addEventListener("click", (e) => {
e.preventDefault();
triParPopularite(films);
});
function triParPopularite(filmsArray) {
filmsArray.sort((a, b) => parseFloat(b.rating) - parseFloat(a.rating));
filteredFilms = [...filmsArray];
current_page = 1;
total_page = Math.ceil(filteredFilms.length / filmsPerPage);
displayPage(current_page);
createPagination(current_page);
}
filteredFilms = [...filmsArray]; // mettre à jour le tableau filtré
current_page = 1;
total_page = Math.ceil(filteredFilms.length / filmsPerPage);
displayPage(current_page);
createPagination(current_page);
// -------------------- TRI --------------------
// Tri récent
function RecentMovies(filmsArray, yearMin = 2000) {
filteredFilms = filmsArray
.filter(f => f.year && f.year >= yearMin)
.sort((a, b) => b.year - a.year);
current_page = 1;
displayPage(current_page);
createPagination(current_page);
}
// Tri par année
function triParAnnee(filmsArray) {
filteredFilms = [...filmsArray].sort((a, b) => b.year - a.year);
current_page = 1;
displayPage(current_page);
createPagination(current_page);
}
// Tri A → Z
function triParNom(filmsArray) {
filteredFilms = [...filmsArray].sort((a, b) => a.title.localeCompare(b.title, "fr", { sensitivity: "base" }));
current_page = 1;
displayPage(current_page);
createPagination(current_page);
}
J'ai réussi du coup a faire marcher mon tri catégorie en créant un tableau avec des mots clefs comme filtres, ces vraiment pas terrible je sais :')
En vous remerciant d'avance pour vos réponse et soyez pas trop dur je débute juste