Skip to content

Commit 9b01bcc

Browse files
committed
plotly#189 rewriting cateogory sorter: extract out logic
1 parent 8a2292c commit 9b01bcc

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

src/plots/cartesian/ordered_categories.js

+23-17
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,27 @@
1111

1212
var d3 = require('d3');
1313

14+
function flattenUniqueSort(axisLetter, categorymode, data) {
15+
var traceLines = data.map(function(d) {return d[axisLetter];});
16+
var categoryMap = {}; // hashmap is O(1);
17+
var i, j, tracePoints, category;
18+
for(i = 0; i < traceLines.length; i++) {
19+
tracePoints = traceLines[i];
20+
for(j = 0; j < tracePoints.length; j++) {
21+
category = tracePoints[j];
22+
if(!categoryMap[category]) {
23+
categoryMap[category] = true;
24+
}
25+
}
26+
}
27+
return Object.keys(categoryMap)
28+
.sort(({
29+
'category ascending': d3.ascending,
30+
'category descending': d3.descending
31+
})[categorymode]);
32+
33+
}
34+
1435

1536
/**
1637
* This pure function returns the ordered categories for specified axisLetter, categorymode, categorylist and data.
@@ -21,6 +42,7 @@ var d3 = require('d3');
2142
* order of the unique categories encountered in the data for specified axisLetter.
2243
*
2344
*/
45+
2446
module.exports = function orderedCategories(axisLetter, categorymode, categorylist, data) {
2547

2648
if(categorymode === 'array') {
@@ -29,22 +51,6 @@ module.exports = function orderedCategories(axisLetter, categorymode, categoryli
2951
} else if(['category ascending', 'category descending'].indexOf(categorymode) === -1) {
3052
return [].slice();
3153
} else {
32-
var traceLines = data.map(function(d) {return d[axisLetter];});
33-
var categoryMap = {}; // hashmap is O(1);
34-
var i, j, tracePoints, category;
35-
for(i = 0; i < traceLines.length; i++) {
36-
tracePoints = traceLines[i];
37-
for(j = 0; j < tracePoints.length; j++) {
38-
category = tracePoints[j];
39-
if(!categoryMap[category]) {
40-
categoryMap[category] = true;
41-
}
42-
}
43-
}
44-
return Object.keys(categoryMap)
45-
.sort(({
46-
'category ascending': d3.ascending,
47-
'category descending': d3.descending
48-
})[categorymode]);
54+
return flattenUniqueSort(axisLetter, categorymode, data);
4955
}
5056
};

0 commit comments

Comments
 (0)