flo-utils
Version:
68 lines (60 loc) • 1.5 kB
JavaScript
import isArray from './isArray';
import isObject from './isObject';
/**
* 数据分而治之,汇总输出
*
* @example
*
* const divideF = useDivide([{key: 'a', hook: (a) => a + 1}])
*
* divideF({a: 3}) // {a: 4}
*
* @param {*} [hooks=[]]
* [{
* key: string|number,
* hook: v => dv
* }]
* @param {*} [divide=(v) => v]
* @returns
*/
function useDivide() {
var hooks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var divide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (v) {
return v;
};
return function (target) {
var hkeys = hooks.map(function (h) {
return h.key;
});
if (isArray(target)) {
return target.map(function (t, i) {
var index = hkeys.findIndex(function (k) {
return k === i;
});
if (index > -1) {
var hook = hooks[index].hook;
return hook ? hook(t) : t;
}
return divide ? divide(t) : t;
});
}
if (isObject(target)) {
var o = {};
Object.keys(target).forEach(function (t) {
var index = hkeys.findIndex(function (k) {
return k === t;
});
var tv = target[t];
if (index > -1) {
var hook = hooks[index].hook;
o[t] = hook ? hook(tv) : tv;
} else {
o[t] = divide ? divide(tv) : tv;
}
});
return o;
}
return target;
};
}
export default useDivide;