processed = {
const sorted = parsed
.filter(
d =>
d.Artist !== "" &&
d.DateAcquired !== "" &&
!/^(Unkn Graph Art|Unknown |Various |Album-)/.test(d.Artist)
)
.map(({ Artist, Department, DateAcquired }) => ({
name: Artist.split(",")[0],
category: Department,
date: DateAcquired.substr(0, 4) + '-01-01'
}))
.sort((a, b) => (a.date > b.date ? 1 : a.date < b.date ? -1 : 0));
let year = sorted[0].date;
const topArtists = new Set();
const artistMap = new Map();
const recordTop = () => {
const top20 = Array.from(artistMap.entries())
.sort((a, b) => b[1] - a[1])
.slice(0, 20);
top20.forEach(([artist]) => topArtists.add(artist));
};
for (const d of sorted) {
if (d.date !== year) {
recordTop();
year = d.date;
}
artistMap.set(d.name, (artistMap.get(d.name) || 0) + 1);
}
recordTop();
return { topArtists, topItems: sorted.filter(d => topArtists.has(d.name)) };
}