tools-for-js 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,18 +16,23 @@ import { API } from 'tools-for-js'
16
16
 
17
17
  ### API
18
18
 
19
- | 名称 | API | 说明 |
20
- | -------------------- | --------------- | ---- |
21
- | 阿拉伯数字转中文数字 | numToChinese | |
22
- | 金额格式化 | moneyFormat | |
23
- | 时间格式化 | dateFormat | |
24
- | 获取时间间隔 | getTimeDistance | |
25
- | 转换时间戳 | timeStamp | |
26
- | 获取倒计时 | countDown | |
27
- | 变量类型判断 | IsType | |
28
- | 深拷贝变量 | deepCopy | |
29
- | 校验空值参数 | isEmpty | |
30
- | 校验两个参数是否相等 | isEqual | |
31
- | 数组去重 | deWeightArray | |
32
- | 生成 UUID | createUUID | |
33
- | | | |
19
+ | 名称 | API | 说明 |
20
+ | ---------------------------- | ---------------- | ---- |
21
+ | 阿拉伯数字转中文数字 | numToChinese | |
22
+ | 金额格式化 | moneyFormat | |
23
+ | 时间格式化 | dateFormat | |
24
+ | 下划线转小驼峰 | convertSmallHump | |
25
+ | 获取时间间隔 | getTimeDistance | |
26
+ | 转换时间戳 | timeStamp | |
27
+ | 获取倒计时 | countDown | |
28
+ | 变量类型判断 | IsType | |
29
+ | 深拷贝变量 | deepCopy | |
30
+ | 校验空值参数 | isEmpty | |
31
+ | 校验两个参数是否相等 | isEqual | |
32
+ | 生成 UUID | createUUID | |
33
+ | 数组去重 | deWeightArray | |
34
+ | 计算树的最后节点某字段的总和 | treeLastChildSum | |
35
+ | 精确加法 | exactAdd | |
36
+ | 计算数组元素的和 | summation | |
37
+ | 计算两个参数 | countNumber | |
38
+ | | | |
package/lib/index.js CHANGED
@@ -9,12 +9,24 @@ Object.defineProperty(exports, "IsType", {
9
9
  return _common.IsType;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "convertSmallHump", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _transform.convertSmallHump;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "countDown", {
13
19
  enumerable: true,
14
20
  get: function get() {
15
21
  return _time.countDown;
16
22
  }
17
23
  });
24
+ Object.defineProperty(exports, "countNumber", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _calculate.countNumber;
28
+ }
29
+ });
18
30
  Object.defineProperty(exports, "createUUID", {
19
31
  enumerable: true,
20
32
  get: function get() {
@@ -30,7 +42,7 @@ Object.defineProperty(exports, "dateFormat", {
30
42
  Object.defineProperty(exports, "deWeightArray", {
31
43
  enumerable: true,
32
44
  get: function get() {
33
- return _common.deWeightArray;
45
+ return _array.deWeightArray;
34
46
  }
35
47
  });
36
48
  Object.defineProperty(exports, "deepCopy", {
@@ -39,6 +51,12 @@ Object.defineProperty(exports, "deepCopy", {
39
51
  return _common.deepCopy;
40
52
  }
41
53
  });
54
+ Object.defineProperty(exports, "exactAdd", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _calculate.exactAdd;
58
+ }
59
+ });
42
60
  Object.defineProperty(exports, "getTimeDistance", {
43
61
  enumerable: true,
44
62
  get: function get() {
@@ -69,6 +87,12 @@ Object.defineProperty(exports, "numToChinese", {
69
87
  return _transform.numToChinese;
70
88
  }
71
89
  });
90
+ Object.defineProperty(exports, "summation", {
91
+ enumerable: true,
92
+ get: function get() {
93
+ return _calculate.summation;
94
+ }
95
+ });
72
96
  Object.defineProperty(exports, "textTransform", {
73
97
  enumerable: true,
74
98
  get: function get() {
@@ -83,4 +107,6 @@ Object.defineProperty(exports, "timeStamp", {
83
107
  });
84
108
  var _transform = require("./utils/transform");
85
109
  var _time = require("./utils/time");
110
+ var _array = require("./utils/array");
111
+ var _calculate = require("./utils/calculate");
86
112
  var _common = require("./utils/common");
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.treeLastChildSum = exports.deWeightArray = void 0;
7
+ var _calculate = require("./calculate");
8
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
9
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
12
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
14
+ /*******
15
+ * @description: 数组去重
16
+ * @author: 琴时
17
+ * @param {Array} list [需要去重的数组对象]
18
+ * @param {String} key [指定数组对象元素主键]
19
+ * 以该主键的值为标准判断数据是否重复|如果数组元素是一般数据类型,key传空即可
20
+ * @param {Function} callback [回调函数,用于处理去重后重复的数据(可不传)]
21
+ * @return {Array} 去重后的新数组对象
22
+ */
23
+ var deWeightArray = exports.deWeightArray = function deWeightArray(list, key, callback) {
24
+ /* 如果数组的元素是基本数据类型那就不传第二个参数 */
25
+ if (!key) {
26
+ var set = new Set(list);
27
+ return _toConsumableArray(set);
28
+ }
29
+ var tempList = []; //重复数据
30
+ var map = new Map(); //创建Map对象数据结构
31
+ // 遍历需要去重的数组对象
32
+ list.forEach(function (item) {
33
+ // 判断map对象中该key是否已经存在
34
+ if (!map.has(item[key])) {
35
+ map.set(item[key], item); //如果不存在,将该数据插入
36
+ } else {
37
+ tempList.push(item);
38
+ }
39
+ });
40
+ IsType('Function', callback) && callback(tempList);
41
+ return _toConsumableArray(map.values()); //将map对象转换回数组再返回
42
+ };
43
+
44
+ /*******
45
+ * @description: [递归]计算树的最后节点某字段的总和
46
+ * @author: 琴时
47
+ * @param {Array} tree [数组树对象]
48
+ * @param {Object} config [配置参数]
49
+ * @param {String} config.key [目标节点名称]
50
+ * @param {String} config.children [递归树节点名称]
51
+ * @returns {Number} [目标节点某字段的总和]
52
+ * @example: treeLastChildSum(tree, { key: 'price', children: 'children' })
53
+ */
54
+
55
+ var treeLastChildSum = exports.treeLastChildSum = function treeLastChildSum(tree, config) {
56
+ var _ref = config || {},
57
+ _ref$key = _ref.key,
58
+ key = _ref$key === void 0 ? 'id' : _ref$key,
59
+ _ref$children = _ref.children,
60
+ children = _ref$children === void 0 ? 'children' : _ref$children;
61
+ var sumList = []; //缓存目标节点值
62
+ var traverseTree = function traverseTree(tree, list, key, children) {
63
+ tree.forEach(function (item) {
64
+ if (item[children] && item[children].length > 0) {
65
+ traverseTree(item[children], list, key, children);
66
+ } else if (item[key]) {
67
+ list.push(item[key]);
68
+ }
69
+ });
70
+ };
71
+ traverseTree(tree, sumList, key, children);
72
+ return (0, _calculate.summation)(sumList);
73
+ };
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.summation = exports.exactAdd = exports.countNumber = void 0;
7
+ /**
8
+ * @description: 精确加法:
9
+ * js的加法结果会有丢失精度的情况,例如两个浮点数相加的时候
10
+ * @author: 琴时
11
+ * @param {Number|String} arg1
12
+ * @param {Number|String} arg2
13
+ * @return {Number}
14
+ */
15
+ var exactAdd = exports.exactAdd = function exactAdd(arg1, arg2) {
16
+ if (isNaN(arg1)) arg1 = 0;
17
+ if (isNaN(arg2)) arg2 = 0;
18
+ arg1 = Number(arg1);
19
+ arg2 = Number(arg2);
20
+ var r1, r2, m, c;
21
+ try {
22
+ r1 = arg1.toString().split('.')[1].length;
23
+ } catch (e) {
24
+ r1 = 0;
25
+ }
26
+ try {
27
+ r2 = arg2.toString().split('.')[1].length;
28
+ } catch (e) {
29
+ r2 = 0;
30
+ }
31
+ c = Math.abs(r1 - r2);
32
+ m = Math.pow(10, Math.max(r1, r2));
33
+ if (c > 0) {
34
+ var cm = Math.pow(10, c);
35
+ if (r1 > r2) {
36
+ arg1 = Number(arg1.toString().replace('.', ''));
37
+ arg2 = Number(arg2.toString().replace('.', '')) * cm;
38
+ } else {
39
+ arg1 = Number(arg1.toString().replace('.', '')) * cm;
40
+ arg2 = Number(arg2.toString().replace('.', ''));
41
+ }
42
+ } else {
43
+ arg1 = Number(arg1.toString().replace('.', ''));
44
+ arg2 = Number(arg2.toString().replace('.', ''));
45
+ }
46
+ return (arg1 + arg2) / m;
47
+ };
48
+ /*******
49
+ * @description: 计算数组元素的和
50
+ * @author: 琴时
51
+ * @param {Array} list
52
+ * @return {Number}
53
+ */
54
+ var summation = exports.summation = function summation(list) {
55
+ var sum = 0;
56
+ if (list && list.length > 0) {
57
+ sum = list.reduce(function (n, m) {
58
+ return exactAdd(n, m);
59
+ });
60
+ }
61
+ return sum;
62
+ };
63
+
64
+ /*******
65
+ * @description: 计算两个参数
66
+ * @param {Number|String} arg1
67
+ * @param {Number|String} arg2
68
+ * @param {String} type [计算类型:sum-加,subtract-减,multiply-乘,divide-除]
69
+ * @return {Number}
70
+ */
71
+ var countNumber = exports.countNumber = function countNumber(arg1, arg2) {
72
+ var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'sum';
73
+ if (arg1 === undefined || arg2 === undefined) {
74
+ console.log('参数格式不正确');
75
+ return NaN;
76
+ }
77
+ if (isNaN(arg1)) arg1 = 0;
78
+ if (isNaN(arg2)) arg2 = 0;
79
+
80
+ // 转字符串类型
81
+ arg1 = arg1.toString();
82
+ arg2 = arg2.toString();
83
+
84
+ // 获取小数点位置
85
+ var index1 = arg1.indexOf('.');
86
+ var index2 = arg2.indexOf('.');
87
+
88
+ // 获取小数点位数
89
+ var ws1 = 0;
90
+ var ws2 = 0;
91
+ if (index1 !== -1) {
92
+ ws1 = arg1.split('.')[1].length;
93
+ }
94
+ if (index2 !== -1) {
95
+ ws2 = arg2.split('.')[1].length;
96
+ }
97
+ var bigger = ws1 > ws2 ? ws1 : ws2; //位数较大值
98
+ var small = ws1 < ws2 ? ws1 : ws2; //位数较小值
99
+ var zeroCount = bigger - small; //位数差
100
+
101
+ // 去除小数点
102
+ arg1 = arg1.replace('.', '');
103
+ arg2 = arg2.replace('.', '');
104
+
105
+ // 位数差额补0
106
+ if (ws1 === small) {
107
+ for (var i = 0; i < zeroCount; i++) {
108
+ arg1 += '0';
109
+ }
110
+ } else {
111
+ for (var _i = 0; _i < zeroCount; _i++) {
112
+ arg2 += '0';
113
+ }
114
+ }
115
+ var result = 0; //结果
116
+ var multiple = 1; //倍数
117
+ for (var _i2 = 0; _i2 < bigger; _i2++) {
118
+ multiple = multiple * 10;
119
+ }
120
+
121
+ // 计算结果
122
+ if (type === 'sum') {
123
+ result = parseInt(arg1) + parseInt(arg2);
124
+ result = result / multiple;
125
+ } else if (type === 'subtract') {
126
+ result = parseInt(arg1) - parseInt(arg2);
127
+ result = result / multiple;
128
+ } else if (type === 'multiply') {
129
+ result = parseInt(arg1) * parseInt(arg2);
130
+ result = result / multiple / multiple;
131
+ } else if (type === 'divide') {
132
+ result = parseInt(arg1) / parseInt(arg2);
133
+ }
134
+ return result;
135
+ };
@@ -3,13 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isEqual = exports.isEmpty = exports.deepCopy = exports.deWeightArray = exports.createUUID = exports.IsType = void 0;
7
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
11
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
12
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
6
+ exports.isEqual = exports.isEmpty = exports.deepCopy = exports.createUUID = exports.IsType = void 0;
13
7
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
8
  /*******
15
9
  * @description: 变量类型判断
@@ -120,36 +114,6 @@ var isEqual = exports.isEqual = function isEqual(a, b) {
120
114
  return true;
121
115
  };
122
116
 
123
- /*******
124
- * @description: 数组去重
125
- * @author: 琴时
126
- * @param {Array} list [需要去重的数组对象]
127
- * @param {String} key [指定数组对象元素主键]
128
- * 以该主键的值为标准判断数据是否重复|如果数组元素是一般数据类型,key传空即可
129
- * @param {Function} callback [回调函数,用于处理去重后重复的数据(可不传)]
130
- * @return {Array} 去重后的新数组对象
131
- */
132
- var deWeightArray = exports.deWeightArray = function deWeightArray(list, key, callback) {
133
- /* 如果数组的元素是基本数据类型那就不传第二个参数 */
134
- if (!key) {
135
- var set = new Set(list);
136
- return _toConsumableArray(set);
137
- }
138
- var tempList = []; //重复数据
139
- var map = new Map(); //创建Map对象数据结构
140
- // 遍历需要去重的数组对象
141
- list.forEach(function (item) {
142
- // 判断map对象中该key是否已经存在
143
- if (!map.has(item[key])) {
144
- map.set(item[key], item); //如果不存在,将该数据插入
145
- } else {
146
- tempList.push(item);
147
- }
148
- });
149
- IsType('Function', callback) && callback(tempList);
150
- return _toConsumableArray(map.values()); //将map对象转换回数组再返回
151
- };
152
-
153
117
  /*******
154
118
  * @description: 生成UUID
155
119
  * UUID(Universally Unique IDentifier) 全局唯一标识符。
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.textTransform = exports.numToChinese = exports.moneyFormat = void 0;
6
+ exports.textTransform = exports.numToChinese = exports.moneyFormat = exports.convertSmallHump = void 0;
7
7
  var chnNumChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
8
8
  var chnUnitSection = ['', '万', '亿', '万亿', '亿亿'];
9
9
  var chnUnitChar = ['', '十', '百', '千'];
@@ -159,4 +159,17 @@ var textTransform = exports.textTransform = function textTransform(params) {
159
159
  }
160
160
  });
161
161
  return arrayTemp;
162
+ };
163
+
164
+ /*******
165
+ * @description: 变量名下划线转小驼峰
166
+ * @author: 琴时
167
+ * @param {String} key
168
+ * @return {String}
169
+ * @example: convertSmallHump('user_name') => userName
170
+ */
171
+ var convertSmallHump = exports.convertSmallHump = function convertSmallHump(key) {
172
+ return key.toLowerCase().replace(/_(\w)/g, function (all, letter) {
173
+ return letter.toUpperCase();
174
+ });
162
175
  };
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "tools-for-js",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "基于babel构建的javascript工具库",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
7
+ "start": "sh build/start.sh",
7
8
  "build": "sh build/build.sh",
8
9
  "release": "sh build/release.sh"
9
10
  },
@@ -27,6 +28,8 @@
27
28
  "devDependencies": {
28
29
  "@babel/cli": "^7.24.5",
29
30
  "@babel/core": "^7.24.5",
30
- "@babel/preset-env": "^7.24.5"
31
+ "@babel/node": "^7.23.9",
32
+ "@babel/preset-env": "^7.24.5",
33
+ "nodemon": "^3.1.0"
31
34
  }
32
- }
35
+ }