From ac7ab8bb70875d153aa0e665d247e059ab40680f Mon Sep 17 00:00:00 2001 From: Michael Maier Date: Thu, 26 Apr 2018 09:21:49 +0200 Subject: [PATCH] Make countForDate very fast. --- src/calendar-heatmap.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/calendar-heatmap.js b/src/calendar-heatmap.js index 8eaa492..df11509 100644 --- a/src/calendar-heatmap.js +++ b/src/calendar-heatmap.js @@ -11,6 +11,7 @@ function calendarHeatmap() { var now = moment().endOf('day').toDate(); var yearAgo = moment().startOf('day').subtract(1, 'year').toDate(); var startDate = null; + var counterMap= {}; var data = []; var max = null; var colorRange = ['#D8E6E7', '#218380']; @@ -32,6 +33,15 @@ function calendarHeatmap() { chart.data = function (value) { if (!arguments.length) { return data; } data = value; + + counterMap= {}; + + data.forEach(function (element, index) { + var key= moment(element.date).format( 'YYYY-MM-DD' ); + var counter= counterMap[key] || 0; + counterMap[key]= counter + element.count; + }); + return chart; }; @@ -244,14 +254,8 @@ function calendarHeatmap() { } function countForDate(d) { - var count = 0; - var match = chart.data().find(function (element, index) { - return moment(element.date).isSame(d, 'day'); - }); - if (match) { - count = match.count; - } - return count; + var key= moment(d).format( 'YYYY-MM-DD' ); + return counterMap[key] || 0; } function formatWeekday(weekDay) {