@d-matrix/utils 1.28.0 → 1.28.2
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/dist/array.d.ts +4 -4
- package/dist/array.js +26 -32
- package/package.json +1 -1
package/dist/array.d.ts
CHANGED
|
@@ -39,8 +39,8 @@ export declare const getArrayOrUndefined: <T>(array?: T[] | null | undefined) =>
|
|
|
39
39
|
* @param options.defaultNo 无可用序号时的默认值(默认1)
|
|
40
40
|
* @returns 未被使用的最小正整数序号
|
|
41
41
|
*/
|
|
42
|
-
export declare
|
|
43
|
-
fieldName:
|
|
42
|
+
export declare function calcUnusedMinSerialNumber(list: any[], options: {
|
|
43
|
+
fieldName: string;
|
|
44
44
|
prefix: string;
|
|
45
|
-
defaultNo?: number
|
|
46
|
-
})
|
|
45
|
+
defaultNo?: number;
|
|
46
|
+
}): number;
|
package/dist/array.js
CHANGED
|
@@ -91,39 +91,33 @@ export const getArrayOrUndefined = (array) => {
|
|
|
91
91
|
* @param options.defaultNo 无可用序号时的默认值(默认1)
|
|
92
92
|
* @returns 未被使用的最小正整数序号
|
|
93
93
|
*/
|
|
94
|
-
export
|
|
95
|
-
// 1. 参数校验与默认值处理
|
|
94
|
+
export function calcUnusedMinSerialNumber(list, options) {
|
|
96
95
|
const { fieldName, prefix, defaultNo = 1 } = options;
|
|
97
|
-
if (!
|
|
98
|
-
return defaultNo; // 非数组直接返回默认值
|
|
99
|
-
if (list.length === 0)
|
|
96
|
+
if (!(list === null || list === void 0 ? void 0 : list.length))
|
|
100
97
|
return defaultNo;
|
|
101
|
-
//
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
98
|
+
// 获取所有匹配前缀的项目并提取序号
|
|
99
|
+
const serialNumbers = list
|
|
100
|
+
.map((item) => item[fieldName])
|
|
101
|
+
.filter((value) => typeof value === 'string' && value.startsWith(prefix))
|
|
102
|
+
.map((value) => {
|
|
103
|
+
const numPart = value.substring(prefix.length);
|
|
104
|
+
// 如果前缀后没有数字,则认为是序号1(或者根据业务需求处理)
|
|
105
|
+
if (numPart === '')
|
|
106
|
+
return 1;
|
|
107
|
+
const num = parseInt(numPart, 10);
|
|
108
|
+
return isNaN(num) ? 0 : num;
|
|
109
|
+
})
|
|
110
|
+
.filter((num) => num > 0)
|
|
111
|
+
.sort((a, b) => a - b);
|
|
112
|
+
// 如果没有匹配项,返回默认值
|
|
113
|
+
if (serialNumbers.length === 0)
|
|
114
|
+
return defaultNo;
|
|
115
|
+
// 找到第一个缺失的正整数
|
|
116
|
+
for (let i = 0; i < serialNumbers.length; i++) {
|
|
117
|
+
if (serialNumbers[i] !== i + 1) {
|
|
118
|
+
return i + 1;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (!usedSerialNumbers[i])
|
|
125
|
-
return i;
|
|
126
|
-
}
|
|
127
|
-
// 5. 极端兜底(理论上不会执行)
|
|
128
|
-
return defaultNo;
|
|
129
|
-
};
|
|
121
|
+
// 如果序列完整,返回下一个数字
|
|
122
|
+
return serialNumbers.length + 1;
|
|
123
|
+
}
|