qmwts 1.1.76 → 1.1.78

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.
@@ -29,7 +29,8 @@ declare const _default: {
29
29
  * @param value 获取元素唯一标识的函数
30
30
  * @param override 遇到重复元素是否覆盖
31
31
  */
32
- uniqueBy<T, K = unknown>(array: T[] | undefined, value: (item: T) => K, override?: boolean): T[];
32
+ uniqueByKey<T, K = unknown>(array: T[] | undefined, value: (item: T) => K, override?: boolean): T[];
33
33
  sort<T>(array: T[], order: "asc" | "desc", ...values: ((item: T) => number)[]): void;
34
+ mergeByKey<T extends object>(keyExtractor: (item: T) => string | number | symbol, ...arrays: T[][]): T[];
34
35
  };
35
36
  export default _default;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lodash_es_1 = require("lodash-es");
3
4
  exports.default = {
4
5
  /**
5
6
  * 数组转化为树形结构
@@ -89,11 +90,13 @@ exports.default = {
89
90
  * @param value 获取元素唯一标识的函数
90
91
  * @param override 遇到重复元素是否覆盖
91
92
  */
92
- uniqueBy(array = [], value, override = false) {
93
+ uniqueByKey(array = [], value, override = false) {
93
94
  array = array ?? [];
94
95
  const map = new Map();
95
96
  for (let i = 0; i < array.length; i++) {
96
97
  const e = array[i];
98
+ if (e == null)
99
+ continue;
97
100
  const key = value(e);
98
101
  if (!map.has(key) || override)
99
102
  map.set(key, e);
@@ -113,5 +116,25 @@ exports.default = {
113
116
  }
114
117
  return 0;
115
118
  });
119
+ },
120
+ mergeByKey(keyExtractor, ...arrays) {
121
+ // 1. 空值防御:过滤空数组,避免无效遍历
122
+ const validArrays = arrays.filter(arr => Array.isArray(arr) && arr.length > 0);
123
+ if (validArrays.length === 0)
124
+ return [];
125
+ const mergeMap = new Map();
126
+ for (let e of validArrays.flat()) {
127
+ if (!e)
128
+ continue;
129
+ const key = keyExtractor(e);
130
+ const v = mergeMap.get(key);
131
+ if (v) {
132
+ mergeMap.set(key, (0, lodash_es_1.merge)({}, e, v)); // v放在后面,即保留先插入的值
133
+ }
134
+ else {
135
+ mergeMap.set(key, { ...e });
136
+ }
137
+ }
138
+ return Array.from(mergeMap.values());
116
139
  }
117
140
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qmwts",
3
- "version": "1.1.76",
3
+ "version": "1.1.78",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "author": "qmw",
12
12
  "license": "ISC",
13
13
  "devDependencies": {
14
+ "@types/lodash-es": "^4.17.12",
14
15
  "axios": "*",
15
16
  "typescript": "^5.9.2",
16
17
  "vitest": "^3.2.4"
@@ -19,7 +20,8 @@
19
20
  "dist"
20
21
  ],
21
22
  "dependencies": {
22
- "jszip": "^3.10.1"
23
+ "jszip": "^3.10.1",
24
+ "lodash-es": "^4.17.22"
23
25
  },
24
26
  "peerDependencies": {
25
27
  "axios": "^1.12.2"