ut2 1.16.0 → 1.17.0

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
@@ -94,6 +94,7 @@ const debounced = debounce(() => {
94
94
  - [curry](https://caijf.github.io/ut2/module-Function.html#.curry) - 柯里化函数。
95
95
  - [debounce](https://caijf.github.io/ut2/module-Function.html#.debounce) - 防抖函数。
96
96
  - [delay](https://caijf.github.io/ut2/module-Function.html#.delay) - 延迟触发。
97
+ - [memoize](https://caijf.github.io/ut2/module-Function.html#.memoize) - 缓存函数结果。
97
98
  - [negate](https://caijf.github.io/ut2/module-Function.html#.negate) - 否定断言。
98
99
  - [once](https://caijf.github.io/ut2/module-Function.html#.once) - 只执行一次。
99
100
  - [partial](https://caijf.github.io/ut2/module-Function.html#.partial) - 预设部分参数。
package/dist/ut2.js CHANGED
@@ -35,29 +35,30 @@
35
35
  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
36
36
  var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
37
37
  var MAX_ARRAY_LENGTH = 4294967295;
38
- var bigIntTag = '[object BigInt]';
39
- var numberTag = '[object Number]';
40
- var booleanTag = '[object Boolean]';
41
- var stringTag = '[object String]';
42
- var dateTag = '[object Date]';
43
- var regExpTag = '[object RegExp]';
44
- var symbolTag = '[object Symbol]';
45
- var errorTag = '[object Error]';
46
- var arrayBufferTag = '[object ArrayBuffer]';
47
- var argumentsTag = '[object Arguments]';
48
- var arrayTag = '[object Array]';
49
- var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return '[object ' + item + ']'; });
50
- var weakSetTag = '[object WeakSet]';
51
- var blobTag = '[object Blob]';
52
- var fileTag = '[object File]';
53
- var domExceptionTag = '[object DOMException]';
54
- var objectTag = '[object Object]';
55
- var dataViewTag = '[object DataView]';
56
- var mapTag = '[object Map]';
57
- var promiseTag = '[object Promise]';
58
- var setTag = '[object Set]';
59
- var weakMapTag = '[object WeakMap]';
60
- var windowTag = '[object Window]';
38
+ var tagPrefix = '[object ';
39
+ var bigIntTag = tagPrefix + 'BigInt]';
40
+ var numberTag = tagPrefix + 'Number]';
41
+ var booleanTag = tagPrefix + 'Boolean]';
42
+ var stringTag = tagPrefix + 'String]';
43
+ var dateTag = tagPrefix + 'Date]';
44
+ var regExpTag = tagPrefix + 'RegExp]';
45
+ var symbolTag = tagPrefix + 'Symbol]';
46
+ var errorTag = tagPrefix + 'Error]';
47
+ var arrayBufferTag = tagPrefix + 'ArrayBuffer]';
48
+ var argumentsTag = tagPrefix + 'Arguments]';
49
+ var arrayTag = tagPrefix + 'Array]';
50
+ var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return tagPrefix + item + ']'; });
51
+ var weakSetTag = tagPrefix + 'WeakSet]';
52
+ var blobTag = tagPrefix + 'Blob]';
53
+ var fileTag = tagPrefix + 'File]';
54
+ var domExceptionTag = tagPrefix + 'DOMException]';
55
+ var objectTag = tagPrefix + 'Object]';
56
+ var dataViewTag = tagPrefix + 'DataView]';
57
+ var mapTag = tagPrefix + 'Map]';
58
+ var promiseTag = tagPrefix + 'Promise]';
59
+ var setTag = tagPrefix + 'Set]';
60
+ var weakMapTag = tagPrefix + 'WeakMap]';
61
+ var windowTag = tagPrefix + 'Window]';
61
62
 
62
63
  function isArray(value) {
63
64
  return Array.isArray(value);
@@ -606,7 +607,7 @@
606
607
  return value == null || value !== value ? defaultValue : value;
607
608
  };
608
609
 
609
- var VERSION = "1.16.0";
610
+ var VERSION = "1.17.0";
610
611
  var isBrowser = typeof window !== stringUndefined && isObjectLike(window) && typeof document !== stringUndefined && isObjectLike(document) && window.document === document;
611
612
  var supportedArgumentsType = getTag((function () { return arguments; })()) === argumentsTag;
612
613
  var FUNC_ERROR_TEXT = 'Expected a function';
@@ -783,6 +784,49 @@
783
784
  }, wait);
784
785
  }
785
786
 
787
+ function argsEqual(newArgs, lastArgs) {
788
+ if (newArgs.length !== lastArgs.length) {
789
+ return false;
790
+ }
791
+ for (var i = 0, len = newArgs.length; i < len; i++) {
792
+ if (!eq(newArgs[i], lastArgs[i])) {
793
+ return false;
794
+ }
795
+ }
796
+ return true;
797
+ }
798
+ function memoize(func, options) {
799
+ var opts = options || {};
800
+ var max = mathCeil(opts.max || 0);
801
+ var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : argsEqual;
802
+ var cache = [];
803
+ function memoized() {
804
+ var _this = this;
805
+ var newArgs = [];
806
+ for (var _i = 0; _i < arguments.length; _i++) {
807
+ newArgs[_i] = arguments[_i];
808
+ }
809
+ var cacheValue = cache.find(function (item) { return item.lastThis === _this && isEqual(item.lastArgs, newArgs); });
810
+ if (cacheValue) {
811
+ return cacheValue.lastReturn;
812
+ }
813
+ var lastReturn = func.apply(this, newArgs);
814
+ if (max > 0 && cache.length >= max) {
815
+ cache.shift();
816
+ }
817
+ cache.push({
818
+ lastArgs: newArgs,
819
+ lastThis: this,
820
+ lastReturn: lastReturn
821
+ });
822
+ return lastReturn;
823
+ }
824
+ memoized.clear = function () {
825
+ cache.length = 0;
826
+ };
827
+ return memoized;
828
+ }
829
+
786
830
  function negate(predicate) {
787
831
  var _this = this;
788
832
  if (typeof predicate !== 'function') {
@@ -2226,6 +2270,7 @@
2226
2270
  exports.lte = lte;
2227
2271
  exports.map = map;
2228
2272
  exports.max = max;
2273
+ exports.memoize = memoize;
2229
2274
  exports.merge = merge;
2230
2275
  exports.mergeObject = mergeObject;
2231
2276
  exports.min = min;