DataUtils.js
4.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findEntryInArray = findEntryInArray;
exports.uniqueId = exports.mathSign = exports.isPercent = exports.isNumber = exports.isNumOrStr = exports.interpolateNumber = exports.hasDuplicate = exports.getPercentValue = exports.getLinearRegression = exports.getAnyElementOfObject = void 0;
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNaN = _interopRequireDefault(require("lodash/isNaN"));
var _get = _interopRequireDefault(require("lodash/get"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var mathSign = exports.mathSign = function mathSign(value) {
if (value === 0) {
return 0;
}
if (value > 0) {
return 1;
}
return -1;
};
var isPercent = exports.isPercent = function isPercent(value) {
return (0, _isString["default"])(value) && value.indexOf('%') === value.length - 1;
};
var isNumber = exports.isNumber = function isNumber(value) {
return (0, _isNumber["default"])(value) && !(0, _isNaN["default"])(value);
};
var isNumOrStr = exports.isNumOrStr = function isNumOrStr(value) {
return isNumber(value) || (0, _isString["default"])(value);
};
var idCounter = 0;
var uniqueId = exports.uniqueId = function uniqueId(prefix) {
var id = ++idCounter;
return "".concat(prefix || '').concat(id);
};
/**
* Get percent value of a total value
* @param {number|string} percent A percent
* @param {number} totalValue Total value
* @param {number} defaultValue The value returned when percent is undefined or invalid
* @param {boolean} validate If set to be true, the result will be validated
* @return {number} value
*/
var getPercentValue = exports.getPercentValue = function getPercentValue(percent, totalValue) {
var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (!isNumber(percent) && !(0, _isString["default"])(percent)) {
return defaultValue;
}
var value;
if (isPercent(percent)) {
var index = percent.indexOf('%');
value = totalValue * parseFloat(percent.slice(0, index)) / 100;
} else {
value = +percent;
}
if ((0, _isNaN["default"])(value)) {
value = defaultValue;
}
if (validate && value > totalValue) {
value = totalValue;
}
return value;
};
var getAnyElementOfObject = exports.getAnyElementOfObject = function getAnyElementOfObject(obj) {
if (!obj) {
return null;
}
var keys = Object.keys(obj);
if (keys && keys.length) {
return obj[keys[0]];
}
return null;
};
var hasDuplicate = exports.hasDuplicate = function hasDuplicate(ary) {
if (!Array.isArray(ary)) {
return false;
}
var len = ary.length;
var cache = {};
for (var i = 0; i < len; i++) {
if (!cache[ary[i]]) {
cache[ary[i]] = true;
} else {
return true;
}
}
return false;
};
/* @todo consider to rename this function into `getInterpolator` */
var interpolateNumber = exports.interpolateNumber = function interpolateNumber(numberA, numberB) {
if (isNumber(numberA) && isNumber(numberB)) {
return function (t) {
return numberA + t * (numberB - numberA);
};
}
return function () {
return numberB;
};
};
function findEntryInArray(ary, specifiedKey, specifiedValue) {
if (!ary || !ary.length) {
return null;
}
return ary.find(function (entry) {
return entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : (0, _get["default"])(entry, specifiedKey)) === specifiedValue;
});
}
/**
* The least square linear regression
* @param {Array} data The array of points
* @returns {Object} The domain of x, and the parameter of linear function
*/
var getLinearRegression = exports.getLinearRegression = function getLinearRegression(data) {
if (!data || !data.length) {
return null;
}
var len = data.length;
var xsum = 0;
var ysum = 0;
var xysum = 0;
var xxsum = 0;
var xmin = Infinity;
var xmax = -Infinity;
var xcurrent = 0;
var ycurrent = 0;
for (var i = 0; i < len; i++) {
xcurrent = data[i].cx || 0;
ycurrent = data[i].cy || 0;
xsum += xcurrent;
ysum += ycurrent;
xysum += xcurrent * ycurrent;
xxsum += xcurrent * xcurrent;
xmin = Math.min(xmin, xcurrent);
xmax = Math.max(xmax, xcurrent);
}
var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;
return {
xmin: xmin,
xmax: xmax,
a: a,
b: (ysum - a * xsum) / len
};
};