utiller 1.0.283 → 1.0.285

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.
@@ -219,16 +219,20 @@ var Utiller = /*#__PURE__*/function () {
219
219
  * utiller.insertToArray(array, 999, 'QQ', 'WW'); /** [3,4,5,'QQ','WW']
220
220
  * */
221
221
  (0, _defineProperty2["default"])(this, "insertToArray", function (array, index) {
222
- index = index + 1;
223
- /** 植樹問題拔 我想 */
224
- var initial = _lodash["default"].slice(array, 0, index);
225
- var end = _lodash["default"].slice(array, index, array.length);
226
- for (var _len = arguments.length, item = new Array(_len > 2 ? _len - 2 : 0), _key2 = 2; _key2 < _len; _key2++) {
227
- item[_key2 - 2] = arguments[_key2];
228
- }
229
- var combine = [].concat((0, _toConsumableArray2["default"])(initial), item, (0, _toConsumableArray2["default"])(end));
230
- array.length = 0;
231
- array.push.apply(array, (0, _toConsumableArray2["default"])(combine));
222
+ if (!Array.isArray(array)) {
223
+ throw new Error("First argument must be an array.");
224
+ }
225
+ // splice index 是插入位置,原函式 index 是插入點的前一個位置
226
+ // index = -1 應插入到開頭 (index 0)
227
+ // index >= array.length 應插入到結尾
228
+ var insertAt = Math.max(0, Math.min(index + 1, array.length));
229
+ for (var _len = arguments.length, items = new Array(_len > 2 ? _len - 2 : 0), _key2 = 2; _key2 < _len; _key2++) {
230
+ items[_key2 - 2] = arguments[_key2];
231
+ }
232
+ array.splice.apply(array, [insertAt, 0].concat(items));
233
+ // 注意:此函式直接修改了傳入的 array,行為與原函式不同(原函式隱式返回 undefined 但修改了 array)
234
+ // 如果需要保持原函式返回 undefined 的行為,可以不加 return
235
+ // 如果希望返回修改後的 array,可以 return array;
232
236
  });
233
237
  /** 西元年 轉成 民國年
234
238
  * full = 是否打印出全名 民國 XX 年
@@ -349,9 +353,9 @@ var Utiller = /*#__PURE__*/function () {
349
353
  var predicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (value) {
350
354
  return _lodash["default"].isUndefined(value);
351
355
  };
352
- for (var key in object) {
353
- if (predicate(object[key])) {
354
- delete object[key];
356
+ for (var _key4 in object) {
357
+ if (predicate(object[_key4])) {
358
+ delete object[_key4];
355
359
  }
356
360
  }
357
361
  }
@@ -471,8 +475,8 @@ var Utiller = /*#__PURE__*/function () {
471
475
  var self = this;
472
476
  var idOfCurrentTimeoutTask = this.mapOfIdNTimeoutId[id];
473
477
  if (idOfCurrentTimeoutTask) clearTimeout(idOfCurrentTimeoutTask);
474
- for (var _len3 = arguments.length, params = new Array(_len3 > 3 ? _len3 - 3 : 0), _key4 = 3; _key4 < _len3; _key4++) {
475
- params[_key4 - 3] = arguments[_key4];
478
+ for (var _len3 = arguments.length, params = new Array(_len3 > 3 ? _len3 - 3 : 0), _key5 = 3; _key5 < _len3; _key5++) {
479
+ params[_key5 - 3] = arguments[_key5];
476
480
  }
477
481
  var idOfTimeoutTask = setTimeout.apply(void 0, [/*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
478
482
  return _regenerator["default"].wrap(function _callee4$(_context4) {
@@ -495,8 +499,8 @@ var Utiller = /*#__PURE__*/function () {
495
499
  value: function printLogMessage(message) {
496
500
  var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
497
501
  if (!this.isProductionEnvironment()) {
498
- for (var _len4 = arguments.length, infos = new Array(_len4 > 2 ? _len4 - 2 : 0), _key5 = 2; _key5 < _len4; _key5++) {
499
- infos[_key5 - 2] = arguments[_key5];
502
+ for (var _len4 = arguments.length, infos = new Array(_len4 > 2 ? _len4 - 2 : 0), _key6 = 2; _key6 < _len4; _key6++) {
503
+ infos[_key6 - 2] = arguments[_key6];
500
504
  }
501
505
  if (error) {
502
506
  this.appendError.apply(this, [message].concat(infos));
@@ -599,8 +603,8 @@ var Utiller = /*#__PURE__*/function () {
599
603
  }, {
600
604
  key: "isOrEquals",
601
605
  value: function isOrEquals(target) {
602
- for (var _len5 = arguments.length, several = new Array(_len5 > 1 ? _len5 - 1 : 0), _key6 = 1; _key6 < _len5; _key6++) {
603
- several[_key6 - 1] = arguments[_key6];
606
+ for (var _len5 = arguments.length, several = new Array(_len5 > 1 ? _len5 - 1 : 0), _key7 = 1; _key7 < _len5; _key7++) {
607
+ several[_key7 - 1] = arguments[_key7];
604
608
  }
605
609
  for (var _i = 0, _several = several; _i < _several.length; _i++) {
606
610
  var each = _several[_i];
@@ -611,8 +615,8 @@ var Utiller = /*#__PURE__*/function () {
611
615
  }, {
612
616
  key: "isAndEquals",
613
617
  value: function isAndEquals() {
614
- for (var _len6 = arguments.length, predicates = new Array(_len6), _key7 = 0; _key7 < _len6; _key7++) {
615
- predicates[_key7] = arguments[_key7];
618
+ for (var _len6 = arguments.length, predicates = new Array(_len6), _key8 = 0; _key8 < _len6; _key8++) {
619
+ predicates[_key8] = arguments[_key8];
616
620
  }
617
621
  for (var _i2 = 0, _predicates = predicates; _i2 < _predicates.length; _i2++) {
618
622
  var predicate = _predicates[_i2];
@@ -634,8 +638,8 @@ var Utiller = /*#__PURE__*/function () {
634
638
  }, {
635
639
  key: "or",
636
640
  value: function or() {
637
- for (var _len7 = arguments.length, booleans = new Array(_len7), _key8 = 0; _key8 < _len7; _key8++) {
638
- booleans[_key8] = arguments[_key8];
641
+ for (var _len7 = arguments.length, booleans = new Array(_len7), _key9 = 0; _key9 < _len7; _key9++) {
642
+ booleans[_key9] = arguments[_key9];
639
643
  }
640
644
  for (var _i3 = 0, _booleans = booleans; _i3 < _booleans.length; _i3++) {
641
645
  var boo = _booleans[_i3];
@@ -646,8 +650,8 @@ var Utiller = /*#__PURE__*/function () {
646
650
  }, {
647
651
  key: "and",
648
652
  value: function and() {
649
- for (var _len8 = arguments.length, booleans = new Array(_len8), _key9 = 0; _key9 < _len8; _key9++) {
650
- booleans[_key9] = arguments[_key9];
653
+ for (var _len8 = arguments.length, booleans = new Array(_len8), _key10 = 0; _key10 < _len8; _key10++) {
654
+ booleans[_key10] = arguments[_key10];
651
655
  }
652
656
  for (var _i4 = 0, _booleans2 = booleans; _i4 < _booleans2.length; _i4++) {
653
657
  var boo = _booleans2[_i4];
@@ -673,8 +677,8 @@ var Utiller = /*#__PURE__*/function () {
673
677
  }, {
674
678
  key: "getExistOne",
675
679
  value: function getExistOne() {
676
- for (var _len9 = arguments.length, candidates = new Array(_len9), _key10 = 0; _key10 < _len9; _key10++) {
677
- candidates[_key10] = arguments[_key10];
680
+ for (var _len9 = arguments.length, candidates = new Array(_len9), _key11 = 0; _key11 < _len9; _key11++) {
681
+ candidates[_key11] = arguments[_key11];
678
682
  }
679
683
  for (var _i5 = 0, _candidates = candidates; _i5 < _candidates.length; _i5++) {
680
684
  var candidate = _candidates[_i5];
@@ -693,8 +697,8 @@ var Utiller = /*#__PURE__*/function () {
693
697
  }, {
694
698
  key: "isAndWith",
695
699
  value: function isAndWith(self, predicate) {
696
- for (var _len10 = arguments.length, several = new Array(_len10 > 2 ? _len10 - 2 : 0), _key11 = 2; _key11 < _len10; _key11++) {
697
- several[_key11 - 2] = arguments[_key11];
700
+ for (var _len10 = arguments.length, several = new Array(_len10 > 2 ? _len10 - 2 : 0), _key12 = 2; _key12 < _len10; _key12++) {
701
+ several[_key12 - 2] = arguments[_key12];
698
702
  }
699
703
  for (var _i6 = 0, _several2 = several; _i6 < _several2.length; _i6++) {
700
704
  var each = _several2[_i6];
@@ -925,8 +929,8 @@ var Utiller = /*#__PURE__*/function () {
925
929
  var result = new Array(n),
926
930
  len = arr.length,
927
931
  taken = new Array(len);
928
- if (n > len) n = len;
929
- if (n > len) throw new RangeError("getShuffledArrayWithLimitCount: more elements taken than available");
932
+ if (n > len) n = len; // Handle n > arr.length case gracefully
933
+
930
934
  while (n--) {
931
935
  var x = Math.floor(Math.random() * len);
932
936
  result[n] = arr[x in taken ? taken[x] : x];
@@ -1036,16 +1040,15 @@ var Utiller = /*#__PURE__*/function () {
1036
1040
  }, {
1037
1041
  key: "getShuffledArrayWithLimitCount",
1038
1042
  value: function getShuffledArrayWithLimitCount(arr, n) {
1039
- var shuffled = _lodash["default"].shuffle(arr);
1040
- return _lodash["default"].take(shuffled, n);
1043
+ return this.getShuffledArrayWithLimitCountHighPerformance(arr, n); // 使用已優化的版本
1041
1044
  }
1042
1045
  }, {
1043
1046
  key: "getRandomItemOfArray",
1044
1047
  value: /** ignore 就是黑名單的意思 */
1045
1048
  function getRandomItemOfArray(array) {
1046
1049
  if (!_lodash["default"].isArray(array)) throw new _exceptioner["default"](9999, "why are you so stupid, typeof array should be array, not ==> ".concat(array, " "));
1047
- for (var _len11 = arguments.length, ignores = new Array(_len11 > 1 ? _len11 - 1 : 0), _key12 = 1; _key12 < _len11; _key12++) {
1048
- ignores[_key12 - 1] = arguments[_key12];
1050
+ for (var _len11 = arguments.length, ignores = new Array(_len11 > 1 ? _len11 - 1 : 0), _key13 = 1; _key13 < _len11; _key13++) {
1051
+ ignores[_key13 - 1] = arguments[_key13];
1049
1052
  }
1050
1053
  var filter = _lodash["default"].without.apply(_lodash["default"], [array].concat(ignores));
1051
1054
  var target = _lodash["default"].size(filter) > 0 ? filter : array;
@@ -1066,8 +1069,8 @@ var Utiller = /*#__PURE__*/function () {
1066
1069
  }, {
1067
1070
  key: "appendMapOfKeyArray",
1068
1071
  value: function appendMapOfKeyArray(object, key) {
1069
- for (var _len12 = arguments.length, value = new Array(_len12 > 2 ? _len12 - 2 : 0), _key13 = 2; _key13 < _len12; _key13++) {
1070
- value[_key13 - 2] = arguments[_key13];
1072
+ for (var _len12 = arguments.length, value = new Array(_len12 > 2 ? _len12 - 2 : 0), _key14 = 2; _key14 < _len12; _key14++) {
1073
+ value[_key14 - 2] = arguments[_key14];
1071
1074
  }
1072
1075
  if (this.isUndefinedNullEmpty(object[key])) {
1073
1076
  object[key] = [].concat(value);
@@ -1078,6 +1081,13 @@ var Utiller = /*#__PURE__*/function () {
1078
1081
  }
1079
1082
 
1080
1083
  /**
1084
+ * 優化版本:針對基於唯一 Key 的合併
1085
+ * @param {Array} major - 主要陣列
1086
+ * @param {Array} sub - 次要陣列
1087
+ * @param {string} key - 用於匹配的唯一鍵名 (e.g., 'id')
1088
+ * @returns {Array} - 合併後的新陣列
1089
+ *
1090
+ *
1081
1091
  * util.getMergedArrayBy(
1082
1092
  [{id: 123, name: 'david'}, {id: 321, name: 'Joe'}],
1083
1093
  [{id: 321, age: 13}, {id: 123, age: 30}],
@@ -1095,23 +1105,24 @@ var Utiller = /*#__PURE__*/function () {
1095
1105
  value: function getMergedArrayBy() {
1096
1106
  var major = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1097
1107
  var sub = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1098
- var predicate = arguments.length > 2 ? arguments[2] : undefined;
1099
- /** predicate可以只帶入屬性質 */
1100
- if (_lodash["default"].isString(predicate)) {
1101
- var attribute = predicate;
1102
- predicate = function predicate(item1, item2) {
1103
- return _lodash["default"].isEqual(item1[attribute], item2[attribute]);
1104
- };
1105
- } else {
1106
- predicate = _lodash["default"].isFunction(predicate) ? predicate : function () {
1107
- return true;
1108
- };
1108
+ var key = arguments.length > 2 ? arguments[2] : undefined;
1109
+ if (!key || major.length === 0 || sub.length === 0) {
1110
+ // 如果沒有 key 或任一陣列為空,無法優化或無需合併,回傳 major 的淺拷貝
1111
+ return (0, _toConsumableArray2["default"])(major);
1109
1112
  }
1110
- return major.map(function (item1) {
1111
- return _objectSpread(_objectSpread({}, _lodash["default"].find(sub, function (item2) {
1112
- return predicate(item1, item2);
1113
- })), item1);
1113
+
1114
+ // 1. sub 陣列轉換為以 key 為鍵的 Map,時間複雜度 O(N)
1115
+ var subMap = new Map(sub.map(function (item) {
1116
+ return [item[key], item];
1117
+ }));
1118
+
1119
+ // 2. 遍歷 major 陣列,從 Map 中查找匹配項,時間複雜度 O(M)
1120
+ return major.map(function (majorItem) {
1121
+ var subItem = subMap.get(majorItem[key]);
1122
+ // 合併找到的 subItem 和 majorItem,majorItem 的屬性優先
1123
+ return _objectSpread(_objectSpread({}, subItem || {}), majorItem);
1114
1124
  });
1125
+ // 整體時間複雜度約為 O(M + N)
1115
1126
  }
1116
1127
  }, {
1117
1128
  key: "getShuffledItemFromArray",
@@ -1221,8 +1232,8 @@ var Utiller = /*#__PURE__*/function () {
1221
1232
  value: function replaceAllWithSets() {
1222
1233
  var string = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
1223
1234
  var after = string;
1224
- for (var _len13 = arguments.length, patterns = new Array(_len13 > 1 ? _len13 - 1 : 0), _key14 = 1; _key14 < _len13; _key14++) {
1225
- patterns[_key14 - 1] = arguments[_key14];
1235
+ for (var _len13 = arguments.length, patterns = new Array(_len13 > 1 ? _len13 - 1 : 0), _key15 = 1; _key15 < _len13; _key15++) {
1236
+ patterns[_key15 - 1] = arguments[_key15];
1226
1237
  }
1227
1238
  for (var _i7 = 0, _patterns = patterns; _i7 < _patterns.length; _i7++) {
1228
1239
  var pattern = _patterns[_i7];
@@ -1250,29 +1261,47 @@ var Utiller = /*#__PURE__*/function () {
1250
1261
  key: "deepFlat",
1251
1262
  value: function deepFlat(collection) {
1252
1263
  var sign = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "_";
1253
- var _self = "";
1254
- if (_lodash["default"].isArray(collection)) {
1255
- var _iterator4 = _createForOfIteratorHelper(collection),
1256
- _step4;
1257
- try {
1258
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
1259
- var o = _step4.value;
1260
- _self += (_lodash["default"].isEmpty(_self) ? "" : sign) + this.deepFlat(o);
1264
+ var result = "";
1265
+ var stack = [[collection, ""]]; // 儲存 [項目, 目前的前綴]
1266
+
1267
+ while (stack.length > 0) {
1268
+ var _stack$pop = stack.pop(),
1269
+ _stack$pop2 = (0, _slicedToArray2["default"])(_stack$pop, 2),
1270
+ current = _stack$pop2[0],
1271
+ prefix = _stack$pop2[1];
1272
+ if (_lodash["default"].isArray(current)) {
1273
+ // 將陣列元素反向推入堆疊以保持順序
1274
+ for (var i = current.length - 1; i >= 0; i--) {
1275
+ stack.push([current[i], prefix]); // 陣列元素不加前綴
1276
+ }
1277
+ } else if (_lodash["default"].isObject(current)) {
1278
+ // 將物件鍵值對反向推入堆疊
1279
+ var keys = Object.keys(current);
1280
+ for (var _i8 = keys.length - 1; _i8 >= 0; _i8--) {
1281
+ var _key16 = keys[_i8];
1282
+ // 值推入堆疊,前綴包含當前鍵
1283
+ stack.push([current[_key16], prefix + _key16 + sign]);
1284
+ }
1285
+ } else {
1286
+ // 基本型別,添加到結果字串
1287
+ var valueString = _lodash["default"].trim(String(current)); // 確保轉為字串並去除頭尾空白
1288
+ if (valueString.length > 0) {
1289
+ // 避免添加空字串或只有空白的字串
1290
+ result += (result.length > 0 ? sign : "") + prefix + valueString;
1291
+ } else if (prefix.length > 0 && result.length > 0) {
1292
+ // 如果值為空但有前綴,且結果已非空,則添加分隔符
1293
+ result += sign;
1294
+ } else if (prefix.length > 0 && result.length === 0) {
1295
+ // 如果值為空但有前綴,且結果為空,則只添加前綴(去掉末尾的 sign)
1296
+ result += prefix.endsWith(sign) ? prefix.slice(0, -sign.length) : prefix;
1261
1297
  }
1262
- } catch (err) {
1263
- _iterator4.e(err);
1264
- } finally {
1265
- _iterator4.f();
1266
- }
1267
- return _self;
1268
- } else if (_lodash["default"].isObject(collection)) {
1269
- for (var key in collection) {
1270
- _self += (_lodash["default"].isEmpty(_self) ? "" : sign) + key + sign + this.deepFlat(collection[key]);
1271
1298
  }
1272
- return _self;
1273
- } else {
1274
- return _lodash["default"].trim(collection);
1275
1299
  }
1300
+ // 最後可能需要處理結尾多餘的 sign
1301
+ if (result.endsWith(sign)) {
1302
+ result = result.slice(0, -sign.length);
1303
+ }
1304
+ return result;
1276
1305
  }
1277
1306
  }, {
1278
1307
  key: "joinEscapeChar",
@@ -1294,11 +1323,11 @@ var Utiller = /*#__PURE__*/function () {
1294
1323
  }, {
1295
1324
  key: "getValueOfPriority",
1296
1325
  value: function getValueOfPriority() {
1297
- for (var _len14 = arguments.length, compares = new Array(_len14), _key15 = 0; _key15 < _len14; _key15++) {
1298
- compares[_key15] = arguments[_key15];
1326
+ for (var _len14 = arguments.length, compares = new Array(_len14), _key17 = 0; _key17 < _len14; _key17++) {
1327
+ compares[_key17] = arguments[_key17];
1299
1328
  }
1300
- for (var _i8 = 0, _compares = compares; _i8 < _compares.length; _i8++) {
1301
- var compare = _compares[_i8];
1329
+ for (var _i9 = 0, _compares = compares; _i9 < _compares.length; _i9++) {
1330
+ var compare = _compares[_i9];
1302
1331
  if (!this.isUndefinedNullEmpty(compare)) return compare;
1303
1332
  }
1304
1333
  return undefined;
@@ -1307,20 +1336,20 @@ var Utiller = /*#__PURE__*/function () {
1307
1336
  key: "asyncPool",
1308
1337
  value: function () {
1309
1338
  var _asyncPool = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(poolLimit, array, iteratorFn) {
1310
- var ret, executing, _iterator5, _step5, _loop;
1339
+ var ret, executing, _iterator4, _step4, _loop;
1311
1340
  return _regenerator["default"].wrap(function _callee7$(_context8) {
1312
1341
  while (1) switch (_context8.prev = _context8.next) {
1313
1342
  case 0:
1314
1343
  ret = [];
1315
1344
  executing = [];
1316
- _iterator5 = _createForOfIteratorHelper(array);
1345
+ _iterator4 = _createForOfIteratorHelper(array);
1317
1346
  _context8.prev = 3;
1318
1347
  _loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
1319
1348
  var item, p, e;
1320
1349
  return _regenerator["default"].wrap(function _loop$(_context7) {
1321
1350
  while (1) switch (_context7.prev = _context7.next) {
1322
1351
  case 0:
1323
- item = _step5.value;
1352
+ item = _step4.value;
1324
1353
  p = Promise.resolve().then(function () {
1325
1354
  return iteratorFn(item, array);
1326
1355
  });
@@ -1345,9 +1374,9 @@ var Utiller = /*#__PURE__*/function () {
1345
1374
  }
1346
1375
  }, _loop);
1347
1376
  });
1348
- _iterator5.s();
1377
+ _iterator4.s();
1349
1378
  case 6:
1350
- if ((_step5 = _iterator5.n()).done) {
1379
+ if ((_step4 = _iterator4.n()).done) {
1351
1380
  _context8.next = 10;
1352
1381
  break;
1353
1382
  }
@@ -1361,10 +1390,10 @@ var Utiller = /*#__PURE__*/function () {
1361
1390
  case 12:
1362
1391
  _context8.prev = 12;
1363
1392
  _context8.t1 = _context8["catch"](3);
1364
- _iterator5.e(_context8.t1);
1393
+ _iterator4.e(_context8.t1);
1365
1394
  case 15:
1366
1395
  _context8.prev = 15;
1367
- _iterator5.f();
1396
+ _iterator4.f();
1368
1397
  return _context8.finish(15);
1369
1398
  case 18:
1370
1399
  return _context8.abrupt("return", Promise.all(ret));
@@ -1382,11 +1411,11 @@ var Utiller = /*#__PURE__*/function () {
1382
1411
  }, {
1383
1412
  key: "getAttrValueInSequence",
1384
1413
  value: function getAttrValueInSequence(info) {
1385
- for (var _len15 = arguments.length, attrs = new Array(_len15 > 1 ? _len15 - 1 : 0), _key16 = 1; _key16 < _len15; _key16++) {
1386
- attrs[_key16 - 1] = arguments[_key16];
1414
+ for (var _len15 = arguments.length, attrs = new Array(_len15 > 1 ? _len15 - 1 : 0), _key18 = 1; _key18 < _len15; _key18++) {
1415
+ attrs[_key18 - 1] = arguments[_key18];
1387
1416
  }
1388
- for (var _i9 = 0, _attrs = attrs; _i9 < _attrs.length; _i9++) {
1389
- var attr = _attrs[_i9];
1417
+ for (var _i10 = 0, _attrs = attrs; _i10 < _attrs.length; _i10++) {
1418
+ var attr = _attrs[_i10];
1390
1419
  if (!_lodash["default"].isEmpty(info[attr])) {
1391
1420
  return info[attr];
1392
1421
  }
@@ -1525,11 +1554,11 @@ var Utiller = /*#__PURE__*/function () {
1525
1554
  function getSliceArrayOfSpecificIndexes(array) {
1526
1555
  var items = [];
1527
1556
  var size = _lodash["default"].size(array);
1528
- for (var _len16 = arguments.length, indexes = new Array(_len16 > 1 ? _len16 - 1 : 0), _key17 = 1; _key17 < _len16; _key17++) {
1529
- indexes[_key17 - 1] = arguments[_key17];
1557
+ for (var _len16 = arguments.length, indexes = new Array(_len16 > 1 ? _len16 - 1 : 0), _key19 = 1; _key19 < _len16; _key19++) {
1558
+ indexes[_key19 - 1] = arguments[_key19];
1530
1559
  }
1531
- for (var _i10 = 0, _indexes = indexes; _i10 < _indexes.length; _i10++) {
1532
- var index = _indexes[_i10];
1560
+ for (var _i11 = 0, _indexes = indexes; _i11 < _indexes.length; _i11++) {
1561
+ var index = _indexes[_i11];
1533
1562
  if (!_lodash["default"].isNumber(index)) throw new _exceptioner["default"](9999, "59941278 index should be number => ".concat(index, ", ").concat(array));
1534
1563
  if (index > size - 1) throw new _exceptioner["default"](9999, "5994123 index=>".concat(index, " is not valid, exceed than array size=").concat(size, ", ").concat(array));
1535
1564
  items.push(_lodash["default"].nth(array, index));
@@ -1594,11 +1623,11 @@ var Utiller = /*#__PURE__*/function () {
1594
1623
  }, {
1595
1624
  key: "isAndConditionOfUndefinedNullEmpty",
1596
1625
  value: function isAndConditionOfUndefinedNullEmpty() {
1597
- for (var _len17 = arguments.length, objs = new Array(_len17), _key18 = 0; _key18 < _len17; _key18++) {
1598
- objs[_key18] = arguments[_key18];
1626
+ for (var _len17 = arguments.length, objs = new Array(_len17), _key20 = 0; _key20 < _len17; _key20++) {
1627
+ objs[_key20] = arguments[_key20];
1599
1628
  }
1600
- for (var _i11 = 0, _objs = objs; _i11 < _objs.length; _i11++) {
1601
- var obj = _objs[_i11];
1629
+ for (var _i12 = 0, _objs = objs; _i12 < _objs.length; _i12++) {
1630
+ var obj = _objs[_i12];
1602
1631
  if (!this.isUndefinedNullEmpty(obj)) return false;
1603
1632
  }
1604
1633
  return true;
@@ -1606,11 +1635,11 @@ var Utiller = /*#__PURE__*/function () {
1606
1635
  }, {
1607
1636
  key: "isOrConditionOfUndefinedNullEmpty",
1608
1637
  value: function isOrConditionOfUndefinedNullEmpty() {
1609
- for (var _len18 = arguments.length, objs = new Array(_len18), _key19 = 0; _key19 < _len18; _key19++) {
1610
- objs[_key19] = arguments[_key19];
1638
+ for (var _len18 = arguments.length, objs = new Array(_len18), _key21 = 0; _key21 < _len18; _key21++) {
1639
+ objs[_key21] = arguments[_key21];
1611
1640
  }
1612
- for (var _i12 = 0, _objs2 = objs; _i12 < _objs2.length; _i12++) {
1613
- var obj = _objs2[_i12];
1641
+ for (var _i13 = 0, _objs2 = objs; _i13 < _objs2.length; _i13++) {
1642
+ var obj = _objs2[_i13];
1614
1643
  if (this.isUndefinedNullEmpty(obj)) return true;
1615
1644
  }
1616
1645
  return false;
@@ -1625,17 +1654,17 @@ var Utiller = /*#__PURE__*/function () {
1625
1654
  };
1626
1655
  var separator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "\n";
1627
1656
  var segments = string.split(separator);
1628
- var _iterator6 = _createForOfIteratorHelper(segments),
1629
- _step6;
1657
+ var _iterator5 = _createForOfIteratorHelper(segments),
1658
+ _step5;
1630
1659
  try {
1631
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1632
- var segment = _step6.value;
1660
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1661
+ var segment = _step5.value;
1633
1662
  predict(segment, _lodash["default"].indexOf(segments, segment), segments);
1634
1663
  }
1635
1664
  } catch (err) {
1636
- _iterator6.e(err);
1665
+ _iterator5.e(err);
1637
1666
  } finally {
1638
- _iterator6.f();
1667
+ _iterator5.f();
1639
1668
  }
1640
1669
  return segments.join(separator);
1641
1670
  }
@@ -1662,8 +1691,8 @@ var Utiller = /*#__PURE__*/function () {
1662
1691
  key: "getNormalizedStringNotStartWith",
1663
1692
  value: function getNormalizedStringNotStartWith(string) {
1664
1693
  var _this2 = this;
1665
- for (var _len19 = arguments.length, predicate = new Array(_len19 > 1 ? _len19 - 1 : 0), _key20 = 1; _key20 < _len19; _key20++) {
1666
- predicate[_key20 - 1] = arguments[_key20];
1694
+ for (var _len19 = arguments.length, predicate = new Array(_len19 > 1 ? _len19 - 1 : 0), _key22 = 1; _key22 < _len19; _key22++) {
1695
+ predicate[_key22 - 1] = arguments[_key22];
1667
1696
  }
1668
1697
  string = this.toCDB(string);
1669
1698
  var after = _lodash["default"].join(_lodash["default"].dropWhile(string, function (each) {
@@ -1677,8 +1706,8 @@ var Utiller = /*#__PURE__*/function () {
1677
1706
  key: "getNormalizedStringNotEndWith",
1678
1707
  value: function getNormalizedStringNotEndWith(string) {
1679
1708
  var _this3 = this;
1680
- for (var _len20 = arguments.length, predicate = new Array(_len20 > 1 ? _len20 - 1 : 0), _key21 = 1; _key21 < _len20; _key21++) {
1681
- predicate[_key21 - 1] = arguments[_key21];
1709
+ for (var _len20 = arguments.length, predicate = new Array(_len20 > 1 ? _len20 - 1 : 0), _key23 = 1; _key23 < _len20; _key23++) {
1710
+ predicate[_key23 - 1] = arguments[_key23];
1682
1711
  }
1683
1712
  string = this.toCDB(string);
1684
1713
  var after = _lodash["default"].join(_lodash["default"].dropRightWhile(string, function (each) {
@@ -1890,25 +1919,25 @@ var Utiller = /*#__PURE__*/function () {
1890
1919
  }, {
1891
1920
  key: "isStringContainInLines",
1892
1921
  value: function isStringContainInLines(context, key) {
1893
- var _iterator7 = _createForOfIteratorHelper(_lodash["default"].split(context, "\n")),
1894
- _step7;
1922
+ var _iterator6 = _createForOfIteratorHelper(_lodash["default"].split(context, "\n")),
1923
+ _step6;
1895
1924
  try {
1896
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
1897
- var each = _step7.value;
1925
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1926
+ var each = _step6.value;
1898
1927
  if (this.has(each, key)) return true;
1899
1928
  }
1900
1929
  } catch (err) {
1901
- _iterator7.e(err);
1930
+ _iterator6.e(err);
1902
1931
  } finally {
1903
- _iterator7.f();
1932
+ _iterator6.f();
1904
1933
  }
1905
1934
  return false;
1906
1935
  }
1907
1936
  }, {
1908
1937
  key: "camel",
1909
1938
  value: function camel() {
1910
- for (var _len21 = arguments.length, words = new Array(_len21), _key22 = 0; _key22 < _len21; _key22++) {
1911
- words[_key22] = arguments[_key22];
1939
+ for (var _len21 = arguments.length, words = new Array(_len21), _key24 = 0; _key24 < _len21; _key24++) {
1940
+ words[_key24] = arguments[_key24];
1912
1941
  }
1913
1942
  return _lodash["default"].camelCase(words.join("_"));
1914
1943
  }
@@ -1928,17 +1957,17 @@ var Utiller = /*#__PURE__*/function () {
1928
1957
  key: "array2Obj",
1929
1958
  value: function array2Obj(array) {
1930
1959
  var obj = {};
1931
- var _iterator8 = _createForOfIteratorHelper(array),
1932
- _step8;
1960
+ var _iterator7 = _createForOfIteratorHelper(array),
1961
+ _step7;
1933
1962
  try {
1934
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1935
- var each = _step8.value;
1963
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
1964
+ var each = _step7.value;
1936
1965
  obj["".concat(this.getObjectKey(each))] = this.getObjectValue(each);
1937
1966
  }
1938
1967
  } catch (err) {
1939
- _iterator8.e(err);
1968
+ _iterator7.e(err);
1940
1969
  } finally {
1941
- _iterator8.f();
1970
+ _iterator7.f();
1942
1971
  }
1943
1972
  return obj;
1944
1973
  }
@@ -1952,23 +1981,23 @@ var Utiller = /*#__PURE__*/function () {
1952
1981
  key: "arrayToObjWith",
1953
1982
  value: function arrayToObjWith(array, predicate) {
1954
1983
  var obj = {};
1955
- var _iterator9 = _createForOfIteratorHelper(array),
1956
- _step9;
1984
+ var _iterator8 = _createForOfIteratorHelper(array),
1985
+ _step8;
1957
1986
  try {
1958
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
1959
- var item = _step9.value;
1960
- var key = predicate(item);
1961
- var content = obj[key];
1987
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
1988
+ var item = _step8.value;
1989
+ var _key25 = predicate(item);
1990
+ var content = obj[_key25];
1962
1991
  if (content && _lodash["default"].isArray(content)) {
1963
1992
  content.push(item);
1964
1993
  } else {
1965
- obj[key] = [item];
1994
+ obj[_key25] = [item];
1966
1995
  }
1967
1996
  }
1968
1997
  } catch (err) {
1969
- _iterator9.e(err);
1998
+ _iterator8.e(err);
1970
1999
  } finally {
1971
- _iterator9.f();
2000
+ _iterator8.f();
1972
2001
  }
1973
2002
  return obj;
1974
2003
  }
@@ -2272,36 +2301,36 @@ var Utiller = /*#__PURE__*/function () {
2272
2301
  key: "toObjectMap",
2273
2302
  value: function toObjectMap(array) {
2274
2303
  var newbies = [];
2275
- for (var _len22 = arguments.length, rules = new Array(_len22 > 1 ? _len22 - 1 : 0), _key23 = 1; _key23 < _len22; _key23++) {
2276
- rules[_key23 - 1] = arguments[_key23];
2304
+ for (var _len22 = arguments.length, rules = new Array(_len22 > 1 ? _len22 - 1 : 0), _key26 = 1; _key26 < _len22; _key26++) {
2305
+ rules[_key26 - 1] = arguments[_key26];
2277
2306
  }
2278
- var _iterator10 = _createForOfIteratorHelper(array),
2279
- _step10;
2307
+ var _iterator9 = _createForOfIteratorHelper(array),
2308
+ _step9;
2280
2309
  try {
2281
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
2282
- var each = _step10.value;
2310
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
2311
+ var each = _step9.value;
2283
2312
  var object = {};
2284
- var _iterator11 = _createForOfIteratorHelper(rules),
2285
- _step11;
2313
+ var _iterator10 = _createForOfIteratorHelper(rules),
2314
+ _step10;
2286
2315
  try {
2287
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
2288
- var rule = _step11.value;
2316
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
2317
+ var rule = _step10.value;
2289
2318
  var func = rule.func ? rule.func : function (stmt) {
2290
2319
  return stmt;
2291
2320
  };
2292
2321
  object[rule.to] = this.isUndefinedNullEmpty(rule.from) || !_lodash["default"].isObject(each) ? func(each) : func(each[rule.from]);
2293
2322
  }
2294
2323
  } catch (err) {
2295
- _iterator11.e(err);
2324
+ _iterator10.e(err);
2296
2325
  } finally {
2297
- _iterator11.f();
2326
+ _iterator10.f();
2298
2327
  }
2299
2328
  newbies.push(object);
2300
2329
  }
2301
2330
  } catch (err) {
2302
- _iterator10.e(err);
2331
+ _iterator9.e(err);
2303
2332
  } finally {
2304
- _iterator10.f();
2333
+ _iterator9.f();
2305
2334
  }
2306
2335
  return newbies;
2307
2336
  }
@@ -2318,47 +2347,47 @@ var Utiller = /*#__PURE__*/function () {
2318
2347
  }, {
2319
2348
  key: "exeAll",
2320
2349
  value: function exeAll(collection) {
2321
- for (var _len23 = arguments.length, funcs = new Array(_len23 > 1 ? _len23 - 1 : 0), _key24 = 1; _key24 < _len23; _key24++) {
2322
- funcs[_key24 - 1] = arguments[_key24];
2350
+ for (var _len23 = arguments.length, funcs = new Array(_len23 > 1 ? _len23 - 1 : 0), _key27 = 1; _key27 < _len23; _key27++) {
2351
+ funcs[_key27 - 1] = arguments[_key27];
2323
2352
  }
2324
2353
  if (_lodash["default"].isArray(collection)) {
2325
- var _iterator12 = _createForOfIteratorHelper(collection),
2326
- _step12;
2354
+ var _iterator11 = _createForOfIteratorHelper(collection),
2355
+ _step11;
2327
2356
  try {
2328
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
2329
- var each = _step12.value;
2330
- var _iterator13 = _createForOfIteratorHelper(funcs),
2331
- _step13;
2357
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
2358
+ var each = _step11.value;
2359
+ var _iterator12 = _createForOfIteratorHelper(funcs),
2360
+ _step12;
2332
2361
  try {
2333
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
2334
- var func = _step13.value;
2362
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
2363
+ var func = _step12.value;
2335
2364
  func(each);
2336
2365
  }
2337
2366
  } catch (err) {
2338
- _iterator13.e(err);
2367
+ _iterator12.e(err);
2339
2368
  } finally {
2340
- _iterator13.f();
2369
+ _iterator12.f();
2341
2370
  }
2342
2371
  }
2343
2372
  /** 陣列專屬邏輯 */
2344
2373
  } catch (err) {
2345
- _iterator12.e(err);
2374
+ _iterator11.e(err);
2346
2375
  } finally {
2347
- _iterator12.f();
2376
+ _iterator11.f();
2348
2377
  }
2349
2378
  } else if (_lodash["default"].isObject(collection)) {
2350
2379
  for (var _each in collection) {
2351
- var _iterator14 = _createForOfIteratorHelper(funcs),
2352
- _step14;
2380
+ var _iterator13 = _createForOfIteratorHelper(funcs),
2381
+ _step13;
2353
2382
  try {
2354
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
2355
- var _func = _step14.value;
2383
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
2384
+ var _func = _step13.value;
2356
2385
  collection[_each] = _func(collection[_each]);
2357
2386
  }
2358
2387
  } catch (err) {
2359
- _iterator14.e(err);
2388
+ _iterator13.e(err);
2360
2389
  } finally {
2361
- _iterator14.f();
2390
+ _iterator13.f();
2362
2391
  }
2363
2392
  }
2364
2393
  /** 物件專屬邏輯 */
@@ -2374,9 +2403,9 @@ var Utiller = /*#__PURE__*/function () {
2374
2403
  return true;
2375
2404
  };
2376
2405
  var collection = {};
2377
- for (var key in major) {
2378
- if (predicate(major, minor, key)) {
2379
- collection[key] = major[key];
2406
+ for (var _key28 in major) {
2407
+ if (predicate(major, minor, _key28)) {
2408
+ collection[_key28] = major[_key28];
2380
2409
  }
2381
2410
  }
2382
2411
  return collection;
@@ -2423,8 +2452,8 @@ var Utiller = /*#__PURE__*/function () {
2423
2452
  key: "isObjectContainAndEqual",
2424
2453
  value: function isObjectContainAndEqual(targetObject, mainObject) {
2425
2454
  var equal = true;
2426
- for (var key in targetObject) {
2427
- if (mainObject[key] === undefined || mainObject[key] !== targetObject[key]) {
2455
+ for (var _key29 in targetObject) {
2456
+ if (mainObject[_key29] === undefined || mainObject[_key29] !== targetObject[_key29]) {
2428
2457
  equal = false;
2429
2458
  break;
2430
2459
  }
@@ -2465,11 +2494,11 @@ var Utiller = /*#__PURE__*/function () {
2465
2494
  key: "toObjectWithAttributeKey",
2466
2495
  value: function toObjectWithAttributeKey(array, attrKeyOfPK) {
2467
2496
  var object = {};
2468
- var _iterator15 = _createForOfIteratorHelper(array),
2469
- _step15;
2497
+ var _iterator14 = _createForOfIteratorHelper(array),
2498
+ _step14;
2470
2499
  try {
2471
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
2472
- var each = _step15.value;
2500
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
2501
+ var each = _step14.value;
2473
2502
  var pk = each[attrKeyOfPK];
2474
2503
  if (this.isUndefinedNullEmpty(pk)) {
2475
2504
  throw new _exceptioner["default"](9999, "48157232 pk can't be empty => '".concat(pk, "'"));
@@ -2477,9 +2506,9 @@ var Utiller = /*#__PURE__*/function () {
2477
2506
  object[pk] = each;
2478
2507
  }
2479
2508
  } catch (err) {
2480
- _iterator15.e(err);
2509
+ _iterator14.e(err);
2481
2510
  } finally {
2482
- _iterator15.f();
2511
+ _iterator14.f();
2483
2512
  }
2484
2513
  return object;
2485
2514
  }
@@ -2502,11 +2531,11 @@ var Utiller = /*#__PURE__*/function () {
2502
2531
  }, {
2503
2532
  key: "getStateOfStringContainsSign",
2504
2533
  value: function getStateOfStringContainsSign(string) {
2505
- for (var _len24 = arguments.length, signs = new Array(_len24 > 1 ? _len24 - 1 : 0), _key25 = 1; _key25 < _len24; _key25++) {
2506
- signs[_key25 - 1] = arguments[_key25];
2534
+ for (var _len24 = arguments.length, signs = new Array(_len24 > 1 ? _len24 - 1 : 0), _key30 = 1; _key30 < _len24; _key30++) {
2535
+ signs[_key30 - 1] = arguments[_key30];
2507
2536
  }
2508
- for (var _i13 = 0, _signs = signs; _i13 < _signs.length; _i13++) {
2509
- var sign = _signs[_i13];
2537
+ for (var _i14 = 0, _signs = signs; _i14 < _signs.length; _i14++) {
2538
+ var sign = _signs[_i14];
2510
2539
  if (this.has(string, sign)) {
2511
2540
  return {
2512
2541
  exists: true,
@@ -2525,8 +2554,8 @@ var Utiller = /*#__PURE__*/function () {
2525
2554
  key: "constraintOfParam",
2526
2555
  value: function constraintOfParam(collection, type) {
2527
2556
  var result = false;
2528
- for (var _len25 = arguments.length, others = new Array(_len25 > 2 ? _len25 - 2 : 0), _key26 = 2; _key26 < _len25; _key26++) {
2529
- others[_key26 - 2] = arguments[_key26];
2557
+ for (var _len25 = arguments.length, others = new Array(_len25 > 2 ? _len25 - 2 : 0), _key31 = 2; _key31 < _len25; _key31++) {
2558
+ others[_key31 - 2] = arguments[_key31];
2530
2559
  }
2531
2560
  var validOfOthersCondition = _lodash["default"].isEmpty(others) ? true : this.and.apply(this, (0, _toConsumableArray2["default"])(others.map(function (each) {
2532
2561
  return each.logic;
@@ -2599,26 +2628,26 @@ var Utiller = /*#__PURE__*/function () {
2599
2628
  }, {
2600
2629
  key: "getArrayOfMoveToSpecificIndex",
2601
2630
  value: function getArrayOfMoveToSpecificIndex(array, from, to) {
2602
- /* #move - Moves an array item from one position in an array to another.
2603
- Note: This is a pure function so a new array will be returned, instead
2604
- of altering the array argument.
2605
- Arguments:
2606
- 1. array (String) : Array in which to move an item. (required)
2607
- 2. moveIndex (Object) : The index of the item to move. (required)
2608
- 3. toIndex (Object) : The index to move item at moveIndex to. (required)
2609
- */
2610
- var item = array[from];
2631
+ if (!Array.isArray(array)) {
2632
+ throw new Error("First argument must be an array.");
2633
+ }
2611
2634
  var length = array.length;
2612
- var diff = from - to;
2613
- if (diff > 0) {
2614
- // move left
2615
- return [].concat((0, _toConsumableArray2["default"])(array.slice(0, to)), [item], (0, _toConsumableArray2["default"])(array.slice(to, from)), (0, _toConsumableArray2["default"])(array.slice(from + 1, length)));
2616
- } else if (diff < 0) {
2617
- // move right
2618
- var targetIndex = to + 1;
2619
- return [].concat((0, _toConsumableArray2["default"])(array.slice(0, from)), (0, _toConsumableArray2["default"])(array.slice(from + 1, targetIndex)), [item], (0, _toConsumableArray2["default"])(array.slice(targetIndex, length)));
2635
+ // 驗證索引範圍
2636
+ if (from < 0 || from >= length || to < 0 || to >= length) {
2637
+ console.warn("Invalid 'from' or 'to' index for getArrayOfMoveToSpecificIndexOptimized.");
2638
+ // 可以選擇拋出錯誤或返回原陣列的副本
2639
+ // throw new RangeError("Index out of bounds");
2640
+ return (0, _toConsumableArray2["default"])(array); // 返回副本
2641
+ }
2642
+ if (from === to) {
2643
+ return (0, _toConsumableArray2["default"])(array); // 位置相同,無需移動,返回副本
2620
2644
  }
2621
- return array;
2645
+ var copy = (0, _toConsumableArray2["default"])(array); // 創建副本
2646
+ var _copy$splice = copy.splice(from, 1),
2647
+ _copy$splice2 = (0, _slicedToArray2["default"])(_copy$splice, 1),
2648
+ item = _copy$splice2[0]; // 從副本中移除元素
2649
+ copy.splice(to, 0, item); // 將元素插入到副本的新位置
2650
+ return copy; // 返回修改後的副本
2622
2651
  }
2623
2652
 
2624
2653
  /** 把array裏面的項目移動到指定的index
@@ -2671,17 +2700,17 @@ var Utiller = /*#__PURE__*/function () {
2671
2700
  return l > r ? 1 : -1;
2672
2701
  });
2673
2702
  var checkValue = "";
2674
- var _iterator16 = _createForOfIteratorHelper(keys),
2675
- _step16;
2703
+ var _iterator15 = _createForOfIteratorHelper(keys),
2704
+ _step15;
2676
2705
  try {
2677
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2678
- var key = _step16.value;
2679
- checkValue += "".concat(key, "=").concat(clone[key], "&");
2706
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
2707
+ var _key32 = _step15.value;
2708
+ checkValue += "".concat(_key32, "=").concat(clone[_key32], "&");
2680
2709
  }
2681
2710
  } catch (err) {
2682
- _iterator16.e(err);
2711
+ _iterator15.e(err);
2683
2712
  } finally {
2684
- _iterator16.f();
2713
+ _iterator15.f();
2685
2714
  }
2686
2715
  checkValue = "HashKey=".concat(hashKey, "&").concat(checkValue, "HashIV=").concat(hashIV); // There is already an & in the end of checkValue
2687
2716
  checkValue = encodeURIComponent(checkValue).toLowerCase();
@@ -2721,17 +2750,17 @@ var Utiller = /*#__PURE__*/function () {
2721
2750
  }, {
2722
2751
  key: "getSpecifyObjectBy",
2723
2752
  value: function getSpecifyObjectBy(array, predicate) {
2724
- var _iterator17 = _createForOfIteratorHelper(array),
2725
- _step17;
2753
+ var _iterator16 = _createForOfIteratorHelper(array),
2754
+ _step16;
2726
2755
  try {
2727
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2728
- var item = _step17.value;
2756
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
2757
+ var item = _step16.value;
2729
2758
  if (predicate(item)) return item;
2730
2759
  }
2731
2760
  } catch (err) {
2732
- _iterator17.e(err);
2761
+ _iterator16.e(err);
2733
2762
  } finally {
2734
- _iterator17.f();
2763
+ _iterator16.f();
2735
2764
  }
2736
2765
  }
2737
2766
 
@@ -2760,27 +2789,27 @@ var Utiller = /*#__PURE__*/function () {
2760
2789
  if (this.isUndefinedNullEmpty(content)) {
2761
2790
  throw new _exceptioner["default"](9999, "".concat(idOfError, " content(pay-load) is undefined || empty"));
2762
2791
  }
2763
- var _iterator18 = _createForOfIteratorHelper(rules),
2764
- _step18;
2792
+ var _iterator17 = _createForOfIteratorHelper(rules),
2793
+ _step17;
2765
2794
  try {
2766
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2767
- var rule = _step18.value;
2795
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
2796
+ var rule = _step17.value;
2768
2797
  if (_lodash["default"].isString(rule)) {
2769
2798
  if (this.isUndefinedNullEmpty(content[rule])) {
2770
2799
  throw new _exceptioner["default"](9999, "".concat(idOfError, " ATTRIBUTE:'").concat(rule, "' is not Exist"));
2771
2800
  }
2772
2801
  } else if (_lodash["default"].isObject(rule)) {
2773
- var key = this.getObjectKey(rule);
2802
+ var _key33 = this.getObjectKey(rule);
2774
2803
  var predicate = this.getObjectValue(rule);
2775
- if (!predicate(content[key])) {
2776
- throw new _exceptioner["default"](9999, "".concat(idOfError, " ATTRIBUTE:'").concat(key, "' is not valid of custom rule"));
2804
+ if (!predicate(content[_key33])) {
2805
+ throw new _exceptioner["default"](9999, "".concat(idOfError, " ATTRIBUTE:'").concat(_key33, "' is not valid of custom rule"));
2777
2806
  }
2778
2807
  }
2779
2808
  }
2780
2809
  } catch (err) {
2781
- _iterator18.e(err);
2810
+ _iterator17.e(err);
2782
2811
  } finally {
2783
- _iterator18.f();
2812
+ _iterator17.f();
2784
2813
  }
2785
2814
  return true;
2786
2815
  }
@@ -2802,28 +2831,28 @@ var Utiller = /*#__PURE__*/function () {
2802
2831
  key: "getArrayOfSummarizeBy",
2803
2832
  value: function getArrayOfSummarizeBy(array, keyOfId, keyOfSum) {
2804
2833
  var obj = {};
2805
- var _iterator19 = _createForOfIteratorHelper(array),
2806
- _step19;
2834
+ var _iterator18 = _createForOfIteratorHelper(array),
2835
+ _step18;
2807
2836
  try {
2808
- for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
2809
- var item = _step19.value;
2810
- var _key27 = item[keyOfId];
2811
- if (obj[_key27] !== undefined) {
2812
- obj[_key27] = obj[_key27] + item[keyOfSum];
2837
+ for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
2838
+ var item = _step18.value;
2839
+ var _key35 = item[keyOfId];
2840
+ if (obj[_key35] !== undefined) {
2841
+ obj[_key35] = obj[_key35] + item[keyOfSum];
2813
2842
  } else {
2814
- obj[_key27] = item[keyOfSum];
2843
+ obj[_key35] = item[keyOfSum];
2815
2844
  }
2816
2845
  }
2817
2846
  } catch (err) {
2818
- _iterator19.e(err);
2847
+ _iterator18.e(err);
2819
2848
  } finally {
2820
- _iterator19.f();
2849
+ _iterator18.f();
2821
2850
  }
2822
2851
  var items = [];
2823
- for (var key in obj) {
2852
+ for (var _key34 in obj) {
2824
2853
  var _obj = {};
2825
- _obj[keyOfId] = key;
2826
- _obj[keyOfSum] = obj[key];
2854
+ _obj[keyOfId] = _key34;
2855
+ _obj[keyOfSum] = obj[_key34];
2827
2856
  items.push(_obj);
2828
2857
  }
2829
2858
  return items;
@@ -3174,7 +3203,7 @@ var Utiller = /*#__PURE__*/function () {
3174
3203
  element,
3175
3204
  _len26,
3176
3205
  attributes,
3177
- _key28,
3206
+ _key36,
3178
3207
  _args10 = arguments;
3179
3208
  return _regenerator["default"].wrap(function _callee9$(_context10) {
3180
3209
  while (1) switch (_context10.prev = _context10.next) {
@@ -3188,8 +3217,8 @@ var Utiller = /*#__PURE__*/function () {
3188
3217
  _context10.next = 16;
3189
3218
  break;
3190
3219
  }
3191
- for (_len26 = _args10.length, attributes = new Array(_len26 > 3 ? _len26 - 3 : 0), _key28 = 3; _key28 < _len26; _key28++) {
3192
- attributes[_key28 - 3] = _args10[_key28];
3220
+ for (_len26 = _args10.length, attributes = new Array(_len26 > 3 ? _len26 - 3 : 0), _key36 = 3; _key36 < _len26; _key36++) {
3221
+ attributes[_key36 - 3] = _args10[_key36];
3193
3222
  }
3194
3223
  _context10.prev = 6;
3195
3224
  _context10.next = 9;
@@ -3232,7 +3261,7 @@ var Utiller = /*#__PURE__*/function () {
3232
3261
  var element,
3233
3262
  _len27,
3234
3263
  attributes,
3235
- _key29,
3264
+ _key37,
3236
3265
  _args11 = arguments;
3237
3266
  return _regenerator["default"].wrap(function _callee10$(_context11) {
3238
3267
  while (1) switch (_context11.prev = _context11.next) {
@@ -3241,8 +3270,8 @@ var Utiller = /*#__PURE__*/function () {
3241
3270
  return dom.$(stringOfTrait);
3242
3271
  case 2:
3243
3272
  element = _context11.sent;
3244
- for (_len27 = _args11.length, attributes = new Array(_len27 > 2 ? _len27 - 2 : 0), _key29 = 2; _key29 < _len27; _key29++) {
3245
- attributes[_key29 - 2] = _args11[_key29];
3273
+ for (_len27 = _args11.length, attributes = new Array(_len27 > 2 ? _len27 - 2 : 0), _key37 = 2; _key37 < _len27; _key37++) {
3274
+ attributes[_key37 - 2] = _args11[_key37];
3246
3275
  }
3247
3276
  if (this.isUndefinedNullEmpty(element)) {
3248
3277
  _context11.next = 9;
@@ -3277,8 +3306,9 @@ var Utiller = /*#__PURE__*/function () {
3277
3306
  key: "getSliceArrayOfUnique",
3278
3307
  value:
3279
3308
  /**
3280
- * 去重數組內容
3281
- * @param {Array} array - 要去重的數組
3309
+ * 優化版本:根據元素類型選擇最高效的去重方式
3310
+ * @param {Array} array - 要去重的陣列
3311
+ * @param {string} [key] - (可選) 如果是物件陣列,指定用於判斷唯一的屬性鍵名
3282
3312
  * @returns {Array} - 去重後的數組
3283
3313
  *
3284
3314
  * // 使用範例
@@ -3295,15 +3325,30 @@ var Utiller = /*#__PURE__*/function () {
3295
3325
  * console.log(uniqueArray(objects)); // [{'aa': 1, 'bb': 2}, {'cc': 1, 'dd': 2}, {'ee': 4, 'ff': 5}]
3296
3326
  */
3297
3327
  function getSliceArrayOfUnique(array) {
3298
- if (array.length === 0) return array;
3299
-
3300
- // 判斷是否為物件數組
3301
- if (_lodash["default"].isObject(array[0])) {
3328
+ if (!Array.isArray(array) || array.length === 0) {
3329
+ return [];
3330
+ }
3331
+ var firstElement = array[0];
3332
+
3333
+ // 1. 處理物件陣列,且提供了 key
3334
+ if (_lodash["default"].isObject(firstElement) && key) {
3335
+ // 使用 Map 根據 key 去重,效率 O(N)
3336
+ var uniqueMap = new Map(array.map(function (item) {
3337
+ return [item[key], item];
3338
+ }));
3339
+ return Array.from(uniqueMap.values());
3340
+ }
3341
+ // 2. 處理物件陣列,但未提供 key (或 key 無效)
3342
+ else if (_lodash["default"].isObject(firstElement)) {
3343
+ // 回退到 lodash 的深度比較,效率較低 O(N^2)
3344
+ console.warn("getSliceArrayOfUniqueOptimized: No key provided for object array, using potentially slow deep comparison.");
3302
3345
  return _lodash["default"].uniqWith(array, _lodash["default"].isEqual);
3303
3346
  }
3304
-
3305
- // 默認處理為簡單數組
3306
- return _lodash["default"].uniq(array);
3347
+ // 3. 處理基本型別陣列 (string, number, boolean, null, undefined, symbol)
3348
+ else {
3349
+ // 使用 Set 去重,效率 O(N)
3350
+ return Array.from(new Set(array));
3351
+ }
3307
3352
  }
3308
3353
  }]);
3309
3354
  }();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utiller",
3
- "version": "1.0.283",
3
+ "version": "1.0.285",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -11,7 +11,7 @@
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
13
  "configerer": "^1.0.11",
14
- "utiller": "^1.0.282",
14
+ "utiller": "^1.0.284",
15
15
  "linepayer": "^1.0.4",
16
16
  "databazer": "^1.0.12",
17
17
  "lodash": "^4.17.20",