From 5f1f9c467a1aa4e1b8d598ed29bb6e7a567f9b53 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 23 Dec 2023 03:45:05 -0800 Subject: feat(wrapped): filter duplicates in merge --- src/lib/Tools/Wrapped.svelte | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte index 4d3f6ec4..56c17942 100644 --- a/src/lib/Tools/Wrapped.svelte +++ b/src/lib/Tools/Wrapped.svelte @@ -346,13 +346,26 @@ await database.activities.bulkDelete((await database.activities.toArray()).map((m) => m.page)); }; - const mergeArraySort = (a: any, b: any) => [...a, ...b].sort((a, b) => b.meanScore - a.meanScore); + const mergeArraySort = (a: any, b: any, mode: 'tags' | 'genres') => { + let merged = [...a, ...b].sort((a, b) => b.meanScore - a.meanScore); + + merged = merged.filter( + (item, index, self) => + self.findIndex((itemToCompare) => + mode === 'genres' + ? itemToCompare.genre === item.genre + : itemToCompare.tag.name === item.tag.name + ) === index + ); + + return merged; + }; const randomCoverFromTop10 = ( statistics: { anime: any; manga: any }, mode: 'tags' | 'genres' ) => { - const top = mergeArraySort(statistics.anime[mode], statistics.manga[mode]); + const top = mergeArraySort(statistics.anime[mode], statistics.manga[mode], mode); return mediaCover(top[Math.floor(Math.random() * top.length)].mediaIds[0]); }; @@ -497,7 +510,7 @@
Highest Rated Genres
    - {#each mergeArraySort(wrapped.statistics.anime.genres, wrapped.statistics.manga.genres).slice(0, highestRatedCount) as genre} + {#each mergeArraySort(wrapped.statistics.anime.genres, wrapped.statistics.manga.genres, 'genres').slice(0, highestRatedCount) as genre}
  1. Highest Rated Tags
      - {#each mergeArraySort(wrapped.statistics.anime.tags, wrapped.statistics.manga.tags).slice(0, highestRatedCount) as tag} + {#each mergeArraySort(wrapped.statistics.anime.tags, wrapped.statistics.manga.tags, 'tags').slice(0, highestRatedCount) as tag}