11
11
12
12
var d3 = require ( 'd3' ) ;
13
13
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
+
14
35
15
36
/**
16
37
* This pure function returns the ordered categories for specified axisLetter, categorymode, categorylist and data.
@@ -21,6 +42,7 @@ var d3 = require('d3');
21
42
* order of the unique categories encountered in the data for specified axisLetter.
22
43
*
23
44
*/
45
+
24
46
module . exports = function orderedCategories ( axisLetter , categorymode , categorylist , data ) {
25
47
26
48
if ( categorymode === 'array' ) {
@@ -29,22 +51,6 @@ module.exports = function orderedCategories(axisLetter, categorymode, categoryli
29
51
} else if ( [ 'category ascending' , 'category descending' ] . indexOf ( categorymode ) === - 1 ) {
30
52
return [ ] . slice ( ) ;
31
53
} 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 ) ;
49
55
}
50
56
} ;
0 commit comments