@@ -14,15 +14,21 @@ var isNumeric = require('fast-isnumeric');
1414var Lib = require ( '../../lib' ) ;
1515var BADNUM = require ( '../../constants/numerical' ) . BADNUM ;
1616
17+ var isArrayOrTypedArray = Lib . isArrayOrTypedArray ;
18+ var isDateTime = Lib . isDateTime ;
19+ var cleanNumber = Lib . cleanNumber ;
20+ var round = Math . round ;
21+
1722module . exports = function autoType ( array , calendar , opts ) {
1823 var a = array ;
1924
20- if ( Lib . isArrayOrTypedArray ( a ) && ! a . length ) return '-' ;
21- if ( ! opts . noMultiCategory && multiCategory ( a ) ) return 'multicategory' ;
22- if ( opts . noMultiCategory && Array . isArray ( a [ 0 ] ) ) {
25+ var noMultiCategory = opts . noMultiCategory ;
26+ if ( isArrayOrTypedArray ( a ) && ! a . length ) return '-' ;
27+ if ( ! noMultiCategory && multiCategory ( a ) ) return 'multicategory' ;
28+ if ( noMultiCategory && Array . isArray ( a [ 0 ] ) ) { // no need to flat typed arrays here
2329 var b = [ ] ;
2430 for ( var i = 0 ; i < a . length ; i ++ ) {
25- if ( Array . isArray ( a [ i ] ) ) {
31+ if ( isArrayOrTypedArray ( a [ i ] ) ) {
2632 for ( var j = 0 ; j < a [ i ] . length ; j ++ ) {
2733 b . push ( a [ i ] [ j ] ) ;
2834 }
@@ -71,13 +77,13 @@ function moreDates(a, calendar) {
7177 var seen = { } ;
7278
7379 for ( var f = 0 ; f < len ; f += inc ) {
74- var i = Math . round ( f ) ;
80+ var i = round ( f ) ;
7581 var ai = a [ i ] ;
7682 var stri = String ( ai ) ;
7783 if ( seen [ stri ] ) continue ;
7884 seen [ stri ] = 1 ;
7985
80- if ( Lib . isDateTime ( ai , calendar ) ) dats ++ ;
86+ if ( isDateTime ( ai , calendar ) ) dats ++ ;
8187 if ( isNumeric ( ai ) ) nums ++ ;
8288 }
8389
@@ -100,15 +106,15 @@ function category(a, convertNumeric) {
100106 var seen = { } ;
101107
102108 for ( var f = 0 ; f < len ; f += inc ) {
103- var i = Math . round ( f ) ;
109+ var i = round ( f ) ;
104110 var ai = a [ i ] ;
105111 var stri = String ( ai ) ;
106112 if ( seen [ stri ] ) continue ;
107113 seen [ stri ] = 1 ;
108114
109115 var t = typeof ai ;
110116 if ( t === 'boolean' ) cats ++ ;
111- else if ( convertNumeric ? Lib . cleanNumber ( ai ) !== BADNUM : t === 'number' ) nums ++ ;
117+ else if ( convertNumeric ? cleanNumber ( ai ) !== BADNUM : t === 'number' ) nums ++ ;
112118 else if ( t === 'string' ) cats ++ ;
113119 }
114120
@@ -119,5 +125,5 @@ function category(a, convertNumeric) {
119125// trace modules that should never auto-type to multicategory
120126// should be declared with 'noMultiCategory'
121127function multiCategory ( a ) {
122- return Lib . isArrayOrTypedArray ( a [ 0 ] ) && Lib . isArrayOrTypedArray ( a [ 1 ] ) ;
128+ return isArrayOrTypedArray ( a [ 0 ] ) && isArrayOrTypedArray ( a [ 1 ] ) ;
123129}
0 commit comments