UNPKG

tools-for-js

Version:

基于babel构建的JavaScript前端工具库

304 lines (291 loc) 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getValueFromArray = exports.getPagination = exports.deWeightArray = exports.checkKeyEmpty = exports.arrayToTree = exports.arrExchange = exports.arrEleMove = void 0; exports.invertSelection = invertSelection; exports.randomNumEnum = void 0; exports.shuffleArray = shuffleArray; exports.treeLastChildSum = exports.sortByKeyAndTime = void 0; var _calculate = require("./calculate"); var _common = require("./common"); var _object = require("./object"); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /******* * @description: 数组去重 * @author: 琴时 * @param {Array} list [需要去重的数组对象] * @param {String} key [指定数组对象元素主键] * 以该主键的值为标准判断数据是否重复|如果数组元素是一般数据类型,key传空即可 * @param {Function} callback [回调函数,用于处理去重后重复的数据(可不传)] * @return {Array} 去重后的新数组对象 */ var deWeightArray = exports.deWeightArray = function deWeightArray(list, key, callback) { /* 如果数组的元素是基本数据类型那就不传第二个参数 */ if (!key) { var set = new Set(list); return _toConsumableArray(set); } var tempList = []; //重复数据 var map = new Map(); //创建Map对象数据结构 // 遍历需要去重的数组对象 list.forEach(function (item) { // 判断map对象中该key是否已经存在 if (!map.has(item[key])) { map.set(item[key], item); //如果不存在,将该数据插入 } else { tempList.push(item); } }); (0, _common.IsType)('Function', callback) && callback(tempList); return _toConsumableArray(map.values()); //将map对象转换回数组再返回 }; /******* * @description: [递归]计算树的最后节点某字段的总和 * @author: 琴时 * @param {Array} tree [数组树对象] * @param {Object} config [配置参数] * @param {String} config.key [目标节点名称] * @param {String} config.children [递归树节点名称] * @returns {Number} [目标节点某字段的总和] * @example: treeLastChildSum(tree, { key: 'price', children: 'children' }) */ var treeLastChildSum = exports.treeLastChildSum = function treeLastChildSum(tree, config) { var _ref = config || {}, _ref$key = _ref.key, key = _ref$key === void 0 ? 'id' : _ref$key, _ref$children = _ref.children, children = _ref$children === void 0 ? 'children' : _ref$children; var sumList = []; //缓存目标节点值 var traverseTree = function traverseTree(tree, list, key, children) { tree.forEach(function (item) { if (item[children] && item[children].length > 0) { traverseTree(item[children], list, key, children); } else if (item[key]) { list.push(item[key]); } }); }; traverseTree(tree, sumList, key, children); return (0, _calculate.summation)(sumList); }; /******* * @description: 校验数组对象中是否存在指定的字段为空 * @author: 琴时 * @param {Array} list [校验的数组对象] * @param {Array} keyList [校验指定的字段-数组形式] * @return {Array} 返回存在空的字段数组 * @example: checkKeyEmpty(tree, ['id', 'name']) */ var checkKeyEmpty = exports.checkKeyEmpty = function checkKeyEmpty(list, keyList) { var temp = []; var loops = function loops(array, key) { array.some(function (item) { if ((0, _common.isEmpty)(item[key])) { // 存在空的字段 temp.push(key); return true; } else if (item.children && item.children.length > 0) { loops(item.children, key); } }); }; keyList.forEach(function (key) { loops(list, key); }); return temp; }; /******* * @description: 移动数组元素 * @author: 琴时 * @param {Array} list * @param {Number} from [移动的位置] * @param {Number} to [目标位置] * @return {Array} */ var arrEleMove = exports.arrEleMove = function arrEleMove(list, from, to) { list = list.slice(); list.splice(to < 0 ? list.length + to : to, 0, list.splice(from, 1)[0]); return list; }; /******* * @description: 数组元素交换位置 * @author: 琴时 * @param {Array} list * @param {Number} i1 * @param {Number} i2 * @return {Array} */ var arrExchange = exports.arrExchange = function arrExchange(list, i1, i2) { list = list.slice(); var item = list[i1]; list[i1] = list[i2]; list[i2] = item; return list; }; /******* * @description: 数组格式转树状结构 * @author: 琴时 * @param {Array} array * @param {Object} config * @param {String} config.id [主键名] * @param {String} config.pid [父级主键名] * @param {String} config.children [子级数组名] * @return {Array} [树状结构数组] */ var arrayToTree = exports.arrayToTree = function arrayToTree(array, config) { var _ref2 = config || {}, _ref2$id = _ref2.id, id = _ref2$id === void 0 ? 'id' : _ref2$id, _ref2$pid = _ref2.pid, pid = _ref2$pid === void 0 ? 'pid' : _ref2$pid, _ref2$children = _ref2.children, children = _ref2$children === void 0 ? 'children' : _ref2$children; var data = (0, _common.deepCopy)(array); var result = []; var hash = {}; data.forEach(function (_, index) { hash[data[index][id]] = data[index]; }); data.forEach(function (item) { var hashVP = hash[item[pid]]; if (hashVP) { !hashVP[children] && (hashVP[children] = []); hashVP[children].push(item); } else { result.push(item); } }); return result; }; /******* * @description: 根据label的值获取value * @author: 琴时 * @param {Array} list * @param {String} labelVal [label的值] * @return {*} */ var getValueFromArray = exports.getValueFromArray = function getValueFromArray(list, labelVal) { var label = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'label'; var value = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'value'; list = (0, _common.deepCopy)(list); var res = list.find(function (item) { return item[label] == labelVal; }) || {}; return res[value]; }; /******* * @description: 随机抽取数组中的n个值 * @author: 琴时 * @param {Array} array * @param {Number} num * @return {Array} */ var randomNumEnum = exports.randomNumEnum = function randomNumEnum(array, num) { var shuffled = array.slice(0), i = array.length, min = i - num, temp, index; while (i-- > min) { index = Math.floor((i + 1) * Math.random()); temp = shuffled[index]; shuffled[index] = shuffled[i]; shuffled[i] = temp; } return shuffled.slice(min); }; /******* * @description: 计算数据分页 * @author: 琴时 * @param {Array} list * @param {Number} params.page [当前页码] * @param {Number} params.pageSize [每页显示条数] * @return {Array} */ var getPagination = exports.getPagination = function getPagination(list, params) { var page = params.page, pageSize = params.pageSize; list = (0, _common.deepCopy)(list); return list.slice((page - 1) * pageSize, page * pageSize); }; /******* * @description: 根据[key]值排序,相同时则根据时间[timeKey]值排序 * @author: 琴时 * @param {*} list * @param {String} config.key [排序字段] * @param {String} config.timeKey [时间字段] * @param {String} config.order [排序方式,默认升序] * @param {String} config.timeOrder [时间排序方式,默认降序] * @return {Array} */ var sortByKeyAndTime = exports.sortByKeyAndTime = function sortByKeyAndTime(list, config) { var _ref3 = config || {}, _ref3$key = _ref3.key, key = _ref3$key === void 0 ? 'sticky' : _ref3$key, _ref3$timeKey = _ref3.timeKey, timeKey = _ref3$timeKey === void 0 ? 'date' : _ref3$timeKey, _ref3$order = _ref3.order, order = _ref3$order === void 0 ? 'asc' : _ref3$order, _ref3$timeOrder = _ref3.timeOrder, timeOrder = _ref3$timeOrder === void 0 ? 'desc' : _ref3$timeOrder; list = (0, _common.deepCopy)(list); return list.sort(function (a, b) { var a_val = (0, _object.getValByKey)(a, key); var a_time = +new Date((0, _object.getValByKey)(a, timeKey)); var b_val = (0, _object.getValByKey)(b, key); var b_time = +new Date((0, _object.getValByKey)(b, timeKey)); if (a_val === b_val) { return timeOrder === 'desc' ? b_time - a_time : a_time - b_time; } return order === 'asc' ? a_val - b_val : b_val - a_val; }); }; /******* * @description: 数组随机打乱 * @author: 琴时 * @param {Array} arr * @return {Array} */ function shuffleArray(arr) { var array = _toConsumableArray(arr); for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var _ref4 = [array[j], array[i]]; array[i] = _ref4[0]; array[j] = _ref4[1]; } return array; } /******* * @description: 数组反选: 选中元素与未选中元素反转 * @author: 琴时 * @param {Array} list * @param {*} elem [选中的元素] * @param {*} key [反转目标元素] * @return {Array} * @example * invertSelection([1, 2], 'all', 'all') => ['all'] * invertSelection(['all'], 1, 'all') => [1] * invertSelection([1, 2, 3], 3, 'all') => [1, 2] * invertSelection([1, 2], 3, 'all') => [1, 2, 3] */ function invertSelection(list, elem) { var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'all'; if (list.includes(elem)) { list = list.filter(function (item) { return item !== elem; }); } else { list.push(elem); } // element=key 时,直接返回[key],否则将key从list中删除 return list.filter(function (item) { return item === key === (elem === key); }); }