utiller 1.0.341 → 1.0.343
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/lib/utiller/index.js +104 -2
- package/package.json +1 -1
- package/template/sample.package.json +1 -1
package/lib/utiller/index.js
CHANGED
|
@@ -22,11 +22,11 @@ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
|
|
22
22
|
var _uuid = require("uuid");
|
|
23
23
|
var _words = require("../words");
|
|
24
24
|
var _nodeHtmlParser = require("node-html-parser");
|
|
25
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
26
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
27
25
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
28
26
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
29
27
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
28
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
29
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
30
30
|
String.format = function () {
|
|
31
31
|
var param = [];
|
|
32
32
|
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
@@ -371,6 +371,108 @@ var Utiller = /*#__PURE__*/function () {
|
|
|
371
371
|
});
|
|
372
372
|
return new TextDecoder().decode(bytes);
|
|
373
373
|
});
|
|
374
|
+
/**
|
|
375
|
+
* const origin = [
|
|
376
|
+
* { label: 'aa', value: 1203 },
|
|
377
|
+
* { label: 'cc', value: 1204 },
|
|
378
|
+
* { label: 'gg', value: 2 }
|
|
379
|
+
* ];
|
|
380
|
+
*
|
|
381
|
+
* const latest = ['aa', 'bb', 'aa', 'dd'];
|
|
382
|
+
* console.log(generateLabelValuePairsWithOrigin(origin, latest));
|
|
383
|
+
* [
|
|
384
|
+
* { label: 'aa', value: 1203 }, // 來自 origin
|
|
385
|
+
* { label: 'bb', value: 843910 }, // 隨機唯一值
|
|
386
|
+
* { label: 'dd', value: 692384 } // 隨機唯一值
|
|
387
|
+
* ]
|
|
388
|
+
*
|
|
389
|
+
* 根據 latest 字串陣列建立 label/value 物件陣列。
|
|
390
|
+
* 若 label 存在於 origin 中,則沿用 origin 的 value;
|
|
391
|
+
* 若 label 不存在,則產生唯一隨機數值作為 value(value 不可重複)。
|
|
392
|
+
*
|
|
393
|
+
* @param {Array<{label: string, value: number}>} origin - 原始資料來源,包含已知 label 與對應的 value。
|
|
394
|
+
* @param {Array<string>} latest - 最新輸入的 label 陣列,可能有重複或新值。
|
|
395
|
+
* @returns {Array<{label: string, value: number}>} - 轉換完成的唯一 label/value 陣列。
|
|
396
|
+
*/
|
|
397
|
+
(0, _defineProperty2["default"])(this, "generateLabelValuePairsWithOrigin", function () {
|
|
398
|
+
var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [{
|
|
399
|
+
label: "aa",
|
|
400
|
+
value: 1203
|
|
401
|
+
}, {
|
|
402
|
+
label: "cc",
|
|
403
|
+
value: 1204
|
|
404
|
+
}, {
|
|
405
|
+
label: "gg",
|
|
406
|
+
value: 2
|
|
407
|
+
}];
|
|
408
|
+
var latest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ["aa", "bb"];
|
|
409
|
+
// 建立已使用過的 value 集合,避免重複
|
|
410
|
+
var usedValues = new Set(origin.map(function (o) {
|
|
411
|
+
return o.value;
|
|
412
|
+
}));
|
|
413
|
+
|
|
414
|
+
// 處理 latest label 清單
|
|
415
|
+
return _lodash["default"].chain(latest).uniq() // 1. 移除重複的 label(只保留唯一值)
|
|
416
|
+
.map(function (label) {
|
|
417
|
+
// 2. 嘗試從 origin 找出是否已存在該 label
|
|
418
|
+
var originItem = _lodash["default"].find(origin, {
|
|
419
|
+
label: label
|
|
420
|
+
});
|
|
421
|
+
if (originItem) {
|
|
422
|
+
// 3. 若存在,直接使用 origin 中的 value
|
|
423
|
+
return {
|
|
424
|
+
label: label,
|
|
425
|
+
value: originItem.value
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// 4. 若不存在,產生一個不重複的隨機 value
|
|
430
|
+
var value;
|
|
431
|
+
do {
|
|
432
|
+
// Firestore 可接受的整數範圍(可調整範圍)
|
|
433
|
+
value = _lodash["default"].random(2, 999999);
|
|
434
|
+
} while (usedValues.has(value)); // 確保 value 唯一
|
|
435
|
+
|
|
436
|
+
// 5. 記錄該值為已使用,避免後續重複
|
|
437
|
+
usedValues.add(value);
|
|
438
|
+
|
|
439
|
+
// 6. 回傳新的物件
|
|
440
|
+
return {
|
|
441
|
+
label: label,
|
|
442
|
+
value: value
|
|
443
|
+
};
|
|
444
|
+
}).value(); // 7. 輸出處理完成的物件陣列
|
|
445
|
+
});
|
|
446
|
+
/**
|
|
447
|
+
* 比對 values 是否出現在 sourceArray 的指定欄位中,並標記 flagKey 欄位
|
|
448
|
+
*
|
|
449
|
+
* @param {Array} values - 要比對的值陣列,例如: [1, 3]
|
|
450
|
+
* @param {Array} sourceArray - 要處理的物件陣列
|
|
451
|
+
* @param {string} [valueKey='value'] - 要比對的欄位名稱,預設為 'value'
|
|
452
|
+
* @param {string} [flagKey='belong'] - 回傳中標記的欄位名稱,預設為 'belong'
|
|
453
|
+
* @returns {Array} 處理後的陣列
|
|
454
|
+
* const B = [
|
|
455
|
+
* { value: 1, label: 'hi' },
|
|
456
|
+
* { value: 2, label: 'hii' },
|
|
457
|
+
* { value: 3, label: 'hiii' }
|
|
458
|
+
* ];
|
|
459
|
+
* console.log(utiller.getItemsOfMarkMatching( B,[1]))
|
|
460
|
+
* [
|
|
461
|
+
* { value: 1, label: 'hi', belong: true },
|
|
462
|
+
* { value: 2, label: 'hii', belong: false },
|
|
463
|
+
* { value: 3, label: 'hiii', belong: false }
|
|
464
|
+
* ]
|
|
465
|
+
**/
|
|
466
|
+
(0, _defineProperty2["default"])(this, "getItemsOfMarkMatching", function () {
|
|
467
|
+
var sourceArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
468
|
+
var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
469
|
+
var valueKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "value";
|
|
470
|
+
var flagKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "belong";
|
|
471
|
+
var valuesSet = new Set(values); // 使用 Set 提高效能
|
|
472
|
+
return _lodash["default"].map(sourceArray, function (item) {
|
|
473
|
+
return _objectSpread(_objectSpread({}, item), {}, (0, _defineProperty2["default"])({}, flagKey, valuesSet.has(item[valueKey])));
|
|
474
|
+
});
|
|
475
|
+
});
|
|
374
476
|
this.init();
|
|
375
477
|
this.env = "dev";
|
|
376
478
|
}
|
package/package.json
CHANGED