From 9b01bccb263ac9c99e8eb772a0a2797fe973e0a5 Mon Sep 17 00:00:00 2001 From: Robert Monfera Date: Sat, 9 Apr 2016 15:49:57 +0200 Subject: [PATCH] #189 rewriting cateogory sorter: extract out logic --- src/plots/cartesian/ordered_categories.js | 40 +++++++++++++---------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/plots/cartesian/ordered_categories.js b/src/plots/cartesian/ordered_categories.js index 44d79079251..b67b4d3278a 100644 --- a/src/plots/cartesian/ordered_categories.js +++ b/src/plots/cartesian/ordered_categories.js @@ -11,6 +11,27 @@ var d3 = require('d3'); +function flattenUniqueSort(axisLetter, categorymode, data) { + var traceLines = data.map(function(d) {return d[axisLetter];}); + var categoryMap = {}; // hashmap is O(1); + var i, j, tracePoints, category; + for(i = 0; i < traceLines.length; i++) { + tracePoints = traceLines[i]; + for(j = 0; j < tracePoints.length; j++) { + category = tracePoints[j]; + if(!categoryMap[category]) { + categoryMap[category] = true; + } + } + } + return Object.keys(categoryMap) + .sort(({ + 'category ascending': d3.ascending, + 'category descending': d3.descending + })[categorymode]); + +} + /** * This pure function returns the ordered categories for specified axisLetter, categorymode, categorylist and data. @@ -21,6 +42,7 @@ var d3 = require('d3'); * order of the unique categories encountered in the data for specified axisLetter. * */ + module.exports = function orderedCategories(axisLetter, categorymode, categorylist, data) { if(categorymode === 'array') { @@ -29,22 +51,6 @@ module.exports = function orderedCategories(axisLetter, categorymode, categoryli } else if(['category ascending', 'category descending'].indexOf(categorymode) === -1) { return [].slice(); } else { - var traceLines = data.map(function(d) {return d[axisLetter];}); - var categoryMap = {}; // hashmap is O(1); - var i, j, tracePoints, category; - for(i = 0; i < traceLines.length; i++) { - tracePoints = traceLines[i]; - for(j = 0; j < tracePoints.length; j++) { - category = tracePoints[j]; - if(!categoryMap[category]) { - categoryMap[category] = true; - } - } - } - return Object.keys(categoryMap) - .sort(({ - 'category ascending': d3.ascending, - 'category descending': d3.descending - })[categorymode]); + return flattenUniqueSort(axisLetter, categorymode, data); } };