UNPKG

flo-utils

Version:
68 lines (60 loc) 1.5 kB
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;