123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- /**
- * 深度克隆
- * Object deepClone
- * @param {Object} obj the object need clone
- */
- function deepClone(obj) {
- if (typeof obj !== 'object' || obj === null) {
- return obj;
- }
-
- if (Array.isArray(obj)) {
- return obj.map((v) => {
- if (typeof v === 'object' && v !== null) {
- return deepClone(v);
- } else {
- return v;
- }
- });
- } else {
- const newObj = {};
-
- Object.keys(obj).forEach((v) => {
- if (typeof obj[v] === 'object' && obj[v] !== null) {
- newObj[v] = deepClone(obj[v]);
- } else {
- newObj[v] = obj[v];
- }
- });
-
- return newObj;
- }
- }
-
- /**
- * @param {Object} target -目标对象
- * @param {...Object} source -原对象
- * @return {Object}
- */
- function assign(target, ...source) {
- const newObj = target;
- if (source.length > 1) {
- let newTarget = source[0];
- source.splice(0, 1);
- source = assign(newTarget, ...source);
- } else {
- source = source[0];
- }
- Object.keys(newObj).forEach((v) => {
- if (typeof newObj[v] === 'object' && newObj[v] !== null && typeof source[v] === 'object' && source[v] !== null) {
- newObj[v] = assign(newObj[v], source[v]);
- delete source[v];
- }
- });
- Object.keys(source).forEach((v) => {
- newObj[v] = source[v];
- });
- return newObj;
- }
-
- /**
- * 返回空
- * @returns {Object} -null
- */
- function noop() {
- return null;
- }
-
- /**
- * 判断属性是否是对象的私有属性 非原型链属性
- * @param {Object} obj -对象
- * @param {string} type -属性
- * @returns {Boolean}
- */
- function hasOwn(obj, type) {
- return Object.prototype.hasOwnProperty.call(obj, type);
- }
-
- /**
- * 判断变量是否未定义
- * @param item
- * @returns {Boolean}
- */
- function isUndef(item) {
- return item === undefined || item === null;
- }
-
- /**
- * 判断变量是否定义
- * @param item
- * @returns {Boolean}
- */
- function isDef(item) {
- return !this.isUndefined(item);
- }
-
- /**
- * 判断是否是字符串
- * @param {any} item
- * @returns {Boolean}
- */
- function isStr(item) {
- return typeof item === 'string';
- }
-
- /**
- * 判断是否是数字
- * @param {any} item
- * @returns {Boolean}
- */
- function isNumber(item) {
- return typeof item === 'number';
- }
-
- /**
- * 判断是否是数组
- * @param {any} item
- * @returns {Boolean}
- */
- function isArray(item) {
- // 判断是否有 isArray方法 如果有绑定当前content 返回
- if (typeof Array.isArray === 'function') {
- return Array.isArray.bind(this)(item);
- }
- // pollfill
- return Object.prototype.toString.call(item) === '[object Array]';
- }
-
- /**
- * 判断是否是对象
- * @param {any} item
- * @returns {Boolean}
- */
- function isObj(obj) {
- return obj !== null && typeof obj === 'object';
- }
-
- /**
- * 判断是否是函数
- * @param {any} item
- * @returns {Boolean}
- */
- function isFunc(item) {
- return typeof item === 'function';
- }
-
- /**
- * 转数字
- * @param {any} val
- * @returns {(typeof val | number)} -返回的值
- */
- function toNumber(val) {
- let n = parseFloat(val);
- return isNaN(n) ? val : n;
- }
-
- function isEmpty(v) {
- if (typeof v == "undefined" || v == null) {
- return true
- }
- if (v == 0 || v == "") {
- return true
- }
- return /^\s+$/g.test(v)
- }
-
- function fenToYuan(cost) {
- if (cost == null || cost <= 0) {
- return 0.00
- }
-
- var res = parseInt((cost / 100) * 100) / 100
- return res.toFixed(2);
- }
-
- function diffArr(arr1, arr2) {
- return arr1.concat(arr2).filter(function (v) {
- return arr1.indexOf(v)===-1 || arr2 .indexOf(v)===-1
- })
- }
-
- /**
- * 计算距离,返回米
- */
- function getDistance(lat1, lng1, lat2, lng2) {
- var radLat1 = lat1 * Math.PI / 180.0;
- var radLat2 = lat2 * Math.PI / 180.0;
- var a = radLat1 - radLat2;
- var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
- var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
- s = s * 6378.137;
- s = Math.round(s * 10000) / 10;
- return s
- }
-
- function parseUrlParamToObj(str) {
- str = decodeURIComponent(str)
- // 创建目标对象
- let params = {},
- // 截取数据字符串
- data=str.slice(str.indexOf("?")),
- aParams = data.substr(1).split("&")
-
- for (let i = 0; i < aParams.length; i++) {
- let aParam = aParams[i].split("=");
- params[aParam[0]] = aParam[1]
- }
- return params;
- }
-
- /**
- * base module. - 公共基础方法模块
- * @module utils/base
- * @see module:utils/base
- */
-
- module.exports = {
- /** 深拷贝 */
- deepClone,
- noop,
- hasOwn,
- isUndef,
- isDef,
- isStr,
- isNumber,
- isArray,
- isObj,
- isFunc,
- toNumber,
- assign,
- isEmpty,
- fenToYuan,
- diffArr,
- getDistance,
- parseUrlParamToObj
- };
-
|