常用js函数

获取变量类型  string object arry null undefined 等等

// 获取变量类型 
export const getPrototype = (val: any) => {
  const typename = Object.prototype.toString.call(val).slice(8, -1).toLowerCase();
  return typename;
}

 

去除整数后面的零

export const fomatInteger = (value: any) => {
  const typename = Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); //获取类型
  // 非数字和字符串直接返回
  if (!['string', 'number'].includes(typename)) {
    return value;
  }
  const num = typename == 'string' ? Number(value) : value; // 将字符串转换成数字
  // 检查值是否为NaN
  if (Number.isNaN(value)) {
    return '';
  }
  const returnNum = Number.isInteger(num) ? parseInt(num, 10) : num; //整数不保留小数点(isAll 为false)时去除小数全是零的整数的零
  return returnNum;
};

 

截取小数点 n位 

/**
 * 截取小数点 n位
 * value 截取的小树
 * n 保留的小数点位数
 * isRound 是否四舍五入 默认为否
 */
export const fomatFloat = (value: any, n: any = 0, isRound: any = true) => {
  const typename = Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); //获取类型

  // 非数字和字符串直接返回
  if (!['string', 'number'].includes(typename)) {
    return value;
  }

  let num =
    typename == 'string'
      ? Number(value.replace(/[^\d.]/g, '')?.replace(/(^\s*)|(\s*$)/g, ''))
      : value;

  // 检查值是否为NaN
  if (Number.isNaN(num)) {
    return '';
  }

  //保留0位整数 直接去除小数
  if (n == 0) {
    return Math.trunc(num);
  }

  if (Number.isInteger(num)) {
    return num;
  }
  // 四舍五入
  if (isRound == true) {
    const fixNum: any = Number(num + 1).toFixed(n); //四舍五入之前加1
    let fixedNum: any = Number(fixNum - 1).toFixed(n); //四舍五入之后减1,再四舍五入一下
    return fixedNum;
  }
  const MathNum = 10 ** n;
  const newNum = Math.floor(num * MathNum) / MathNum;

  return newNum;
};

 

获取url参数

const geturlParams=(name)=>{
    const reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
    if (reg.test(window.location.href)) return decodeURI(RegExp.$2.replace(/\+/g, " ")); return "";
};

 

获取所有url参数

/**
* 获取当前 URL 所有 GET 查询参数
* 入参:要解析的 URL,不传则默认为当前 URL
* 返回:一个<key, value>参数对象
*/
export const geturlAllParam = (url = location.search) => {
  const params = {};
  const keys = url.match(/([^?&]+)(?==)/g);
  const values = url.match(/(?<==)([^&]*)/g) || [];
  for (const index in keys) {
    params[keys[index]] = values[index];
  }
  return params;
}

删除数组指定元素

const removeByValue=(arr=[], val="")=>{
  for(var i=0; i<arr.length; i++) {
    if(arr[i] == val) {
      arr.splice(i, 1);
      break;
    }
  }
}

 

产生随机数

// 生成随机数
/**
 * @param n  生成随机数的位数
 * @param type  类型 1:数字 2字母 3:数字加字母 4//数字加字母加特殊符号
 * @param isDeduplication 是否去除重复
 */
export const random = (n: any = 5, type: any = 3, isDeduplication: any = false) => {
  const numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; //数字
  const letter = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; //字母
  const symbol = ['-', '.', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', ':', '<', '>', '?']; //特殊符号
  const randomTypes = {
    1: [...numbers],
    2: [...letter], //字母
    3: [...numbers, ...letter], //数字加字母
    4: [...numbers, ...letter, ...symbol], //数字加字母加符号
  };
  const chars = randomTypes[type];
  const num = chars.length - 1;
  // var res = "";
  const arrys = [];
  for (let i = 0; i < n; i++) {
    const id = Math.ceil(Math.random() * num);
    if (!isDeduplication) {
      arrys.push(chars[id]);
    } else {
      n = n > num ? num : n;
      const randoms = chars[id];
      if (arrys.indexOf(randoms) == -1) {
        arrys.push(randoms);
      } else {
        i = i - 1;
      }
    }
  }
  const resString = arrys ? arrys.join('') : '';
  return resString;
};

 

生成一定范围内的随机数

function randomNum(maxNum, minNum){
    var randoms = Math.ceil(Math.random() * (maxNum-minNum)+minNum);
    return randoms
}

 

原生js获取兄弟节点

// 获取兄弟节点
function getNearEle(ele, type) {
    type = type == 1 ? "previousSibling" : "nextSibling";
    var nearEle = ele[type];
    while(nearEle) {
      if(nearEle.nodeType === 1) {
        return nearEle;
      }
      nearEle = nearEle[type];
      if(!nearEle) {
        break;
      }
    }
    return null;
}

 

 

判断字符串长度 (汉字为两个字符)

function strlen(str) {
    var len = 0;
    for (var i = 0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        //单字节加1
        if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
            len++;
        }
        else {
            len += 2;
        }
    }
    return len;
}
 

  截取字符串,多出的显示省略号   

var cutstr = function (strings, len) {  
    if(strings==""){
        return "";
    }
    var restr = strings;  
    var wlength = strings.replace(/[^\x00-\xff]/g, "**").length;  
    if (wlength > len) {  
        for (var k = len / 2; k < strings.length; k++) {  
            if (strings.substr(0, k).replace(/[^\x00-\xff]/g, "**").length >= len) {  
                restr = strings.substr(0, k) + "...";  
                break;  
            }  
        }  
    }  
    return restr;  
}

 

添加js

export const addScriptElement = (url: any) => {
  const script = document.createElement('script');
  script.src = url;
  script.type = 'text/javascript';
  document.body.appendChild(script);
  document.querySelector('head')?.appendChild(script);
};

 

判断是否是微信浏览器

export const isWeiXin = () => {
  //window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
  const ua = window.navigator.userAgent.toLowerCase();
  //通过正则表达式匹配ua中是否含有MicroMessenger字符串
  if (ua.match(/MicroMessenger/i) == 'micromessenger') {
    return true;
  }
  return false;
}

 

判断是否为PC端 true为PC端,false为手机端

// 判断是否为PC端 true为PC端,false为手机端
export const isPC = () => {
  const userAgentInfo = navigator.userAgent;
  const Agents = ["Android", "iPhone",
    "SymbianOS", "Windows Phone",
    "iPad", "iPod"];
  let flag = true;
  for (let v = 0; v < Agents.length; v++) {
    if (userAgentInfo.indexOf(Agents[v]) > 0) {
      flag = false;
      break;
    }
  }
  return flag;
}

 

对象转数组

/***
 * data:要转换的字符串
 */
export const objToArry = (data: any = "") => {
  if (data == "") {
    return [];
  }
  const typename = Object.prototype.toString.call(data).slice(8, -1).toLowerCase();
  if (typename !== "object") {
    return data
  }
  const newArry: any = [];
  Object.keys(data).forEach((key: any) => {
    if (data[key] && data[key] != "") {
      newArry.push({
        label: data[key],
        value: key
      })
    }
  })
  return newArry
}

 

以某符号隔开的字符串转数组  

/***
 * data:要转换的字符串
 * symbol:隔开的符号 ,默认为逗号
 */
export const stringToArry = (data: any = "", symbol: any = ",") => {
  if (data == "") {
    return [];
  }
  const typename = Object.prototype.toString.call(data).slice(8, -1).toLowerCase();
  if (typename !== "string") {
    return data
  }
  if (data.includes(symbol)) {
    const splis = data?.split(symbol);
    const arrys = [];
    for (let i = 0; i < splis.length; i++) {
      if (splis[i] !== "") {
        arrys.push(splis[i])
      }

    }
    return arrys
  }
  return [data]
}

 

获取get的url拼接数据  

//获取get的url拼接数据  
export const getGETurlData = (obj = {}, except?: any[]) => {
  const newArry: any[] = [];

  Object.keys(obj).forEach((k: any) => {
    if (except && except.includes(k)) {
      return false;
    }
    newArry.push(`${k}=${obj[k]}`)
  })

  return newArry.join("&")
}

 

处理url  去除参数和最后的斜杠

/****处理url  去除参数和最后的斜杠*/
function urlDelParam(url: any) {
  if (!url || url == '') {
    return '';
  }
  //去除参数
  let newUrl = url.indexOf('?') > 0 ? url.split('?')[0] : url;
  //去除最后的斜杠
  newUrl =
    newUrl.lastIndexOf('/') == newUrl.length - 1
      ? newUrl.substring(0, newUrl.lastIndexOf('/'))
      : newUrl;
  return newUrl;
}
 

//分页

/**
 * 手动分页
 * @param dataSource 数据源 所有数据
 * @param pagination  分页配置
 * @param current:当前页
 * @param total  总页数
 * @param pageSize 每页条数
 * 
 */
const toPagination = (dataSource: any, pagination: any) => {

  if (!pagination) {
    return dataSource
  }

  const { current = 1, total = 0, pageSize = 15 } = pagination || {}
  const satrt = (current - 1) * pageSize + 1;

  const satrtData = satrt > total ? total : satrt;
  const endData = (satrtData + pageSize) > total ? total : satrtData + pageSize;
  const newData: any = []
  if (satrtData == endData) {
    dataSource.forEach((items: any, index: any) => {
      const keys = index + 1
      if (keys == satrtData) {
        newData.push(items)
      }
    })
  } else {
    dataSource.forEach((items: any, index: any) => {
      const keys = index + 1
      if (keys >= satrtData && keys < endData) {

        newData.push(items)
      }
    })
  }
  return newData
}

 

 

移动端优化

// 移动端优化显示
export function mobileOptimize() {
  document.querySelector("meta[name=viewport]")?.setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no")
  addScriptElement("https://as.alipayobjects.com/g/component/fastclick/1.0.6/fastclick.js")
  addScriptElement("http://www.webnotes.top/public/mobiles.js?v=1.1")
  const script = document.createElement("script");
  script.innerHTML =
    `
          if ('addEventListener' in document) {
              document.addEventListener('DOMContentLoaded', function() {
                  FastClick.attach(document.body);
              }, false);
          }
          if(!window.Promise) {
              document.writeln('<script src="https://as.alipayobjects.com/g/component/es6-promise/3.2.2/es6-promise.min.js"'+'>'+'<'+'/'+'script>');
          }
      `
  document.querySelector('head')?.appendChild(script);
}

 

object 根据某个字段去重

const removeDuplicateObjects = (array: any = [], keys?: any = "id") => {
    const newArr = array.reduce((pre: any, cur: any) => {
      const preKyes = pre.map((items1: any) => items1[keys]).filter((item2: any) => !!item2) || [];
      if (!preKyes.includes(cur[keys])) {
        return pre.concat(cur)
      } else {
        return pre
      }
    }, [])
    return newArr
  }

 

 

封装的日期排序方法

/**
 * 封装的日期排序方法
 * @param {*} data
 * @param {*} keys
 */

export const sortByDate = (data = [], keys) => {
  const newArry = data.sort((s1, s2) => {
    if (Date.parse(s1[keys]) > Date.parse(s2[keys])) {
      return -1;
    }
    return 1;
  });
  return newArry;
};

 

金额格式化,金额加,如 12345 格式化未12,345

/**
 * 金额格式化,金额加千分符`,`和2位小数点
 * 如 123345 格式化未12,345.00
 */
export const amountFormat = (value: any) => {
  const type = Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); //获取类型
  if (type !== 'string' && type != 'number') {
    return value;
  }
  // if (type == 'string' && value.includes(',')) {
  //   return value;
  // }
  const newValue = fomatFloat(value, 2, true); //保留两位小数,没有添加两个0
  const Integer = newValue.slice(0, newValue.lastIndexOf('.')); //整数部分
  const decimal = newValue.slice(newValue.lastIndexOf('.') + 1, newValue.length); //小数部分
  const reg1 = /(?!^)(?=(\d{3})+$)/g; //整数部分从后向前每隔3位加个逗号','
  return `${Integer.replace(reg1, ',')}.${decimal}`;
};

 

检查浏览器型号和版本

// 检查浏览器型号和版本
const useBrowser = () => {
    const ua = navigator.userAgent.toLowerCase();
    const re = /(msie|firefox|chrome|opera|version).*?([\d.]+)/;
    const m = ua.match(re);
    const Sys = {
        browser: m[1].replace(/version/, "'safari"),
        version: m[2]
    };

    return Sys;
};

 

posted @ 2023-08-07 09:32  huihui2014  阅读(100)  评论(0)    收藏  举报