@planarcat/js-toolkit 1.4.0 → 1.5.1
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
|
@@ -128,6 +128,22 @@ console.log(
|
|
|
128
128
|
);
|
|
129
129
|
// 输出: "12.34%"
|
|
130
130
|
|
|
131
|
+
// 函数类型前缀
|
|
132
|
+
console.log(
|
|
133
|
+
toFormattedNumberString(123.456, {
|
|
134
|
+
prefix: num => `$${Math.floor(num)}`,
|
|
135
|
+
})
|
|
136
|
+
);
|
|
137
|
+
// 输出: "$123123.456"
|
|
138
|
+
|
|
139
|
+
// 函数类型后缀
|
|
140
|
+
console.log(
|
|
141
|
+
toFormattedNumberString(123.456, {
|
|
142
|
+
suffix: num => `/${num.toFixed(0)}`,
|
|
143
|
+
})
|
|
144
|
+
);
|
|
145
|
+
// 输出: "123.456/123"
|
|
146
|
+
|
|
131
147
|
// 处理数组
|
|
132
148
|
console.log(toFormattedNumberString([123.456, '789.012'], { decimalPlaces: 2 }));
|
|
133
149
|
// 输出: ["123.46", "789.01"]
|
|
@@ -163,7 +179,8 @@ src/
|
|
|
163
179
|
├── function/
|
|
164
180
|
│ └── debounce.ts # 函数防抖功能
|
|
165
181
|
├── object/
|
|
166
|
-
│
|
|
182
|
+
│ ├── toFormattedNumber.ts # 数字格式化函数
|
|
183
|
+
│ └── toFormattedNumberString.ts # 格式化数字字符串函数
|
|
167
184
|
├── types/
|
|
168
185
|
│ ├── date.ts # 日期相关类型定义
|
|
169
186
|
│ ├── function.ts # 防抖相关类型定义
|
|
@@ -231,6 +248,13 @@ npm run test:coverage
|
|
|
231
248
|
|
|
232
249
|
## 更新日志
|
|
233
250
|
|
|
251
|
+
### v1.5.0
|
|
252
|
+
|
|
253
|
+
- ✨ 为 `toFormattedNumberString` 函数的前缀后缀添加函数类型支持
|
|
254
|
+
- ✨ 修复 0 值、NaN 值和无数字字符串的前缀后缀处理问题
|
|
255
|
+
- ✨ 完善文档和测试用例,确保覆盖所有功能
|
|
256
|
+
- ✨ 优化项目规则文件结构,采用分层管理
|
|
257
|
+
|
|
234
258
|
### v1.4.0
|
|
235
259
|
|
|
236
260
|
- ✨ 优化数字格式化功能,无数字字符串返回 `0` 而不是 `NaN`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toFormattedNumberString.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toFormattedNumberString.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"AAuEA,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,EAAE,CAAC;AAEZ,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,GAAG,MAAM,EAAE,CAAC;AAuIrB,eAAe,uBAAuB,CAAC"}
|
|
@@ -19,8 +19,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
19
|
* @param options.zeroValue - 当值为0时的显示,默认'0'
|
|
20
20
|
* @param options.useLocalizedFormat - 是否使用本地化格式,默认false
|
|
21
21
|
* @param options.preProcessor - 预处理函数,在数字转换后、字符串格式化前应用
|
|
22
|
-
* @param options.prefix -
|
|
23
|
-
*
|
|
22
|
+
* @param options.prefix - 前缀,可以是字符串或函数,默认''
|
|
23
|
+
* 如果是函数,会接收格式化前的数字作为参数,返回字符串作为前缀
|
|
24
|
+
* @param options.suffix - 后缀,可以是字符串或函数,默认''
|
|
25
|
+
* 如果是函数,会接收格式化前的数字作为参数,返回字符串作为后缀
|
|
24
26
|
*
|
|
25
27
|
* @returns 格式化后的数字字符串或字符串数组
|
|
26
28
|
* - 如果输入是单个值,返回格式化后的字符串
|
|
@@ -51,6 +53,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
51
53
|
* suffix: '%'
|
|
52
54
|
* }); // "12.34%"
|
|
53
55
|
*
|
|
56
|
+
* // 函数类型前缀
|
|
57
|
+
* toFormattedNumberString(123.456, {
|
|
58
|
+
* prefix: (num) => `$${Math.floor(num)}`
|
|
59
|
+
* }); // "$123123.456"
|
|
60
|
+
*
|
|
61
|
+
* // 函数类型后缀
|
|
62
|
+
* toFormattedNumberString(123.456, {
|
|
63
|
+
* suffix: (num) => `/${num.toFixed(0)}`
|
|
64
|
+
* }); // "123.456/123"
|
|
65
|
+
*
|
|
54
66
|
* // 处理数组
|
|
55
67
|
* toFormattedNumberString([123.456, '789.012'], { decimalPlaces: 2 }); // ["123.46", "789.01"]
|
|
56
68
|
*
|
|
@@ -64,6 +76,29 @@ const toFormattedNumber_1 = __importDefault(require("./toFormattedNumber"));
|
|
|
64
76
|
function toFormattedNumberString(object, options) {
|
|
65
77
|
// 解构并设置默认值
|
|
66
78
|
const { decimalPlaces = true, nanValue = "NaN", zeroValue = "0", useLocalizedFormat = false, preProcessor, prefix = "", suffix = "", } = options || {};
|
|
79
|
+
/**
|
|
80
|
+
* 处理前缀或后缀,可以是字符串或函数
|
|
81
|
+
* @param prefixOrSuffix - 前缀或后缀,可以是字符串或函数
|
|
82
|
+
* @param num - 要传递给函数的数字
|
|
83
|
+
* @returns 处理后的前缀或后缀字符串
|
|
84
|
+
*/
|
|
85
|
+
const processPrefixSuffix = (prefixOrSuffix, num) => {
|
|
86
|
+
if (typeof prefixOrSuffix === "function") {
|
|
87
|
+
return prefixOrSuffix(num);
|
|
88
|
+
}
|
|
89
|
+
return prefixOrSuffix;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* 添加前缀和后缀
|
|
93
|
+
* @param str - 要添加前缀后缀的字符串
|
|
94
|
+
* @param num - 要传递给前缀后缀函数的数字
|
|
95
|
+
* @returns 添加了前缀后缀的字符串
|
|
96
|
+
*/
|
|
97
|
+
const addPrefixSuffix = (str, num) => {
|
|
98
|
+
const processedPrefix = processPrefixSuffix(prefix, num);
|
|
99
|
+
const processedSuffix = processPrefixSuffix(suffix, num);
|
|
100
|
+
return `${processedPrefix}${str}${processedSuffix}`;
|
|
101
|
+
};
|
|
67
102
|
/**
|
|
68
103
|
* 将单个数字转换为格式化字符串
|
|
69
104
|
* @param num - 要转换的数字
|
|
@@ -72,7 +107,7 @@ function toFormattedNumberString(object, options) {
|
|
|
72
107
|
const convertNumberToString = (num) => {
|
|
73
108
|
// 处理0情况
|
|
74
109
|
if (num === 0) {
|
|
75
|
-
return zeroValue;
|
|
110
|
+
return addPrefixSuffix(zeroValue, num);
|
|
76
111
|
}
|
|
77
112
|
// 应用预处理函数
|
|
78
113
|
const processedNum = preProcessor ? preProcessor(num) : num;
|
|
@@ -104,7 +139,7 @@ function toFormattedNumberString(object, options) {
|
|
|
104
139
|
}
|
|
105
140
|
}
|
|
106
141
|
// 添加前缀和后缀
|
|
107
|
-
return
|
|
142
|
+
return addPrefixSuffix(strNum, processedNum);
|
|
108
143
|
};
|
|
109
144
|
/**
|
|
110
145
|
* 检查字符串是否包含数字
|
|
@@ -128,7 +163,7 @@ function toFormattedNumberString(object, options) {
|
|
|
128
163
|
// 检查是否为无数字的字符串
|
|
129
164
|
if (typeof value === "string" && !hasNumbers(value)) {
|
|
130
165
|
// 无数字的字符串返回0
|
|
131
|
-
return zeroValue;
|
|
166
|
+
return addPrefixSuffix(zeroValue, 0);
|
|
132
167
|
}
|
|
133
168
|
// 对于其他类型,首先将输入转换为数字
|
|
134
169
|
// 注意:toFormattedNumber对于单个值会返回number类型
|
|
@@ -139,7 +174,7 @@ function toFormattedNumberString(object, options) {
|
|
|
139
174
|
// 检查是否为NaN
|
|
140
175
|
if (isNaN(num)) {
|
|
141
176
|
// 其他NaN情况,使用nanValue
|
|
142
|
-
return nanValue;
|
|
177
|
+
return addPrefixSuffix(nanValue, num);
|
|
143
178
|
}
|
|
144
179
|
// 正常数字转换
|
|
145
180
|
return convertNumberToString(num);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toFormattedNumberString.js","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":";;;;;AAAA
|
|
1
|
+
{"version":3,"file":"toFormattedNumberString.js","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"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"}
|
package/dist/types/object.d.ts
CHANGED
|
@@ -44,14 +44,14 @@ export interface ToFormattedNumberStringOptions extends CommonFormatOptions {
|
|
|
44
44
|
*/
|
|
45
45
|
preProcessor?: (num: number) => number;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* 前缀,可以是字符串或函数,
|
|
48
48
|
* 默认''。
|
|
49
49
|
*/
|
|
50
|
-
prefix?: string;
|
|
50
|
+
prefix?: string | ((value: number) => string);
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* 后缀,可以是字符串或函数,
|
|
53
53
|
* 默认''。
|
|
54
54
|
*/
|
|
55
|
-
suffix?: string;
|
|
55
|
+
suffix?: string | ((value: number) => string);
|
|
56
56
|
}
|
|
57
57
|
//# sourceMappingURL=object.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/types/object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/types/object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC9C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC/C"}
|
package/package.json
CHANGED