首页 > 其他分享 >JS常用方法

JS常用方法

时间:2024-03-19 16:30:13浏览次数:17  
标签:常用 return arr value JS const array replace 方法

1、判断对象数组是否有相同属性 相同:true \ 不相同:false

export const hasDuplicates = (array, keyArr) => {
  return array.some((item, index) => {
    return array.findIndex((v, i) => {
      let keyValue = '';
      let keyValue1 = '';
      keyArr.forEach(d => {
        keyValue = keyValue += JSON.stringify(v[d]);
        keyValue1 = keyValue1 += JSON.stringify(item[d]);
      });
      return i !== index && keyValue === keyValue1;
    }) !== -1;
  });
};

2、冒泡排序

// 冒泡排序
export const maopaoSort = (array) => {
  if (Array.isArray(array)) {
    if (array.length === 1) {
      return array;
    }
    let temp = null;
    for (let i = 0; i < array.length; i++) {
      for (let j = 0; j < array.length - i - 1; j++) {
        if (array[j] > array[j + 1]) {
          temp = array[j];
          array[j] = array[j + 1];
          array[j + 1] = temp;
        }
      }
    }
    return array;
  }
};

3、数组对象去重,根据key去重

// 数组对象去重,根据key去重
export const nodup = (arr, key) => {
  const map = new Map();
  for (const item of arr) {
    if (!map.has(key ? item[key] : item)) {
      map.set(key ? item[key] : item, item);
    }
  }
  return [...map.values()];
};

4、截取几位小数

/**
 * 截取几位小数
 * @param {number} value 浮点数
 * @param {number} [number=2] 保留几位小数
 * @param {boolean} [round] 是否四舍五入
 * @returns {number}
 */
export function toFixed(value, number = 2, round) {
  const method = round ? Math.round : Math.floor;
  return method(Math.pow(10, number) * value) / Math.pow(10, number);
}

5、递归对象或数组清除文本类型值的两边空格

/**
 * 递归对象或数组清除文本类型值的两边空格
 * @param {Object|Array} obj
 * @return {Object|Array}
 */
export function trim(obj) {
  const type = typeof obj;
  if (type === 'string') {
    return obj.trim();
  }
  if (Array.isArray(obj)) {
    return obj.map(n => trim(n));
  }
  if (obj && type === 'object') {
    Object.entries(obj).forEach(([k, v]) => {
      obj[k] = trim(v);
    });
    return obj;
  }
  return obj;
}

6、获取数据类型

/**
 * 获取数据类型
 * @param {*} data 任何数据
 * @return {string} 数据类型,如:Number,String,Boolean,Object,Array,Date,Null,Undefined
 */
export function getType(data) {
  const str = Object.prototype.toString.call(data);
  const result = str.match(/\[object ([\w]+)\]/);
  return (result && result.length > 1)
    ? result[1]
    : '';
}

7、数字转发大写金额格式

// 数字转发大写金额格式
export function toChineseMoney(n) {
  if (n === 0) {
    return '零';
  }
  if (!/^(\+|-)?(0|[1-9]\d*)(\.\d+)?$/.test(n)) {
    return '数据非法';
  }
  let unit = '仟佰拾亿仟佰拾万仟佰拾元角分';
  let str = '';
  n += '00';
  const a = parseFloat(n);
  if (a < 0) {
    n = n.substr(1);
  }
  const p = n.indexOf('.');
  if (p >= 0) {
    n = n.substring(0, p) + n.substr(p + 1, 2);
  }

  unit = unit.substr(unit.length - n.length);

  for (let i = 0; i < n.length; i++) {
    str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
  }
  if (a > 0) {
    return str.replace(/零([仟佰拾角])/g, '零').replace(/(零)+/g, '零').replace(/零([万亿元])/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '圆整');
  } else {
    return '负' + str.replace(/零([仟佰拾角])/g, '零').replace(/(零)+/g, '零').replace(/零([万亿元])/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '圆整');
  }
}

8、数字格式

/**
 * 数字格式
 * value:值
 * decimalsLen: 保留几位小数
 * integerLen: 整数长度
 * */
export function numberFormat(value, decimalsLen, integerLen = 9) {
  value = String(value);
  if (decimalsLen) {
    value = value.replace(/[^0-9.]/ig, '');
  }
  if (!decimalsLen) {
    value = value.replace(/[^0-9]/ig, '');
    let arr = value.split('');
    if (arr[0] === '0') {
      return '0';
    }
    if (arr?.length > integerLen) {
      arr = arr.splice(0, integerLen);
    }
    return arr.join('');
  }
  let dotIndex = 0;
  for (let i = 0; i < value.length; i++) {
    if (value[i] === '.') {
      dotIndex = i;
      break;
    }
  }
  value = value.replace(/\./ig, '');
  value = value.split('');
  if (dotIndex !== 0) {
    value.splice(dotIndex, 0, '.');
  }
  value = value.join('');
  const arr = value.split('.');
  if (arr[0].indexOf('0') === 0) arr[0] = 0;
  if (arr[0].length > integerLen) {
    arr[0] = arr[0].substring(0, integerLen);
  }
  if (arr[1]?.length > decimalsLen) {
    arr[1] = arr[1].slice(0, decimalsLen);
  }
  if (arr.length === 2) value = arr[0] + '.' + arr[1];
  if (dotIndex === 0) value = arr[0];
  return value;
}

9、文件下载模块

/**
 * 文件下载模块
 * @module download
 */

/**
 * 二进制文件流下载
 * @param {BlobPart} data 文件流
 * @param {string} fileName 下载文件名
 */
export function downloadBlob(data, fileName) {
  const blob = new Blob([data]);
  const link = document.createElement('a');
  link.download = fileName;
  link.style.display = 'none';
  link.href = URL.createObjectURL(blob);
  link.click();
  URL.revokeObjectURL(link.href);
}

/**
 * 文件url下载
 * @param {string} url 文件地址
 * @param {string} fileName 下载文件名
 */
export function downloadUrl(url, fileName) {
  const link = document.createElement('a');
  link.download = fileName;
  link.href = url;
  link.target = '_blank';
  link.click();
}

/**
 * post方式下载文件
 * @param {string} url 请求地址
 * @param {object} params 请求参数对象
 * @param {string} [method=post] 请求类型
 */
export function downloadPost(url, params = {}, method = 'post') {
  const form = document.createElement('form');
  form.style.display = 'none';
  form.action = url;
  form.method = method;
  form.target = '_blank';
  Object.keys(params).forEach(name => {
    const input = document.createElement('input');
    input.type = 'hidden';
    input.name = name;
    input.value = params[name];
    form.appendChild(input);
  });
  document.body.appendChild(form);
  form.submit();
  document.body.removeChild(form);
}

export default {
  downloadBlob,
  downloadUrl,
  downloadPost
};

10、日期格式化

/**
 * 日期格式化
 */
export function dateFormat (fmt, date) {
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'H+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds(),
    'q+': Math.floor((date.getMonth() + 3) / 3),
    S: date.getMilliseconds()
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
    }
  }
  return fmt;
}

标签:常用,return,arr,value,JS,const,array,replace,方法
From: https://blog.csdn.net/weixin_44208880/article/details/136844100

相关文章

  • 常州IGM机器人RTE497的日常维修保养方法
    一、IGM机器人RTE497日常检查每日工作前,进行以下检查:外观检查:确认IGM机器人RTE497本体无明显损伤,各部件连接稳固。电缆检查:检查所有电缆、气管等是否完好,无磨损、无挤压。润滑检查:确保各润滑点油量充足,关节运动顺畅。环境检查:确保工作环境无杂物、无粉尘,保持机器人干净整......
  • 关于方法的三个练习
    packagecom.jsu.www;importjava.lang.reflect.Array;publicclassNew04{publicstaticvoidmain(String[]args){intarr[]={11,22,33,44,55};//明确要打印的对象printfArr(arr);//定义一个方法来打印}publicstaticvoidprintfArr......
  • [转][C#][WPF] 字体模糊的解决方法
    来源:通义灵码提问:WPF 字体模糊的解决方法回答:在C#WPF应用程序中,当改变窗体大小时出现字体模糊的问题,主要与WPF的渲染机制以及DPI缩放有关。以下是一些解决或改善字体模糊问题的方法:启用像素对齐呈现:对于UI元素,可以设置SnapsToDevicePixels属性为True以确保控件的内容尽可......
  • 五、jsPlumb实现流程图配置--连线
    一、线条创建在第一篇文章讲到过线条一共有四种类型Bezier、Straight、Flowchart、StateMachine,以及每种类型的样子,接下来就演示如何创建线条。创建一条连线有两种方式:通过代码创建;用户使用鼠标拖拽进行创建。1.通过代码创建使用jsPlumb提供的connectAPI可以创建连线。......
  • post方法下载excel
    main{ByteArrayOutputStreamoutputStream=excelUtil.exportExcel(header,data);//返回文件流给前端StringfileName="fixedSavingExport"+CommUtil.getComputerDate()+".csv";returnResponseEntity.ok().header(HttpHeaders.CONTENT_DISP......
  • 超全!Python读取文件方法
    文件是无处不在的,无论我们使用哪种编程语言,处理文件对于每个程序员都是必不可少的文件处理是一种用于创建文件、写入数据和从中读取数据的过程,Python拥有丰富的用于处理不同文件类型的包,从而使得我们可以更加轻松方便的完成文件处理的工作本文大纲:使用上下文管理器打开......
  • cacti 1.2.x 周月年历史数据被压缩解决方法
    ​​​​​​​​​​目录1、问题现象2、原因分析3、解决方法3.1修改数据源配置文件RRAs3.2删除rrd文件前言:使用cacti监控网络流量的最大用途之一就是95计费,95计费是按5分钟取样,1小时12个点,一天24小时288个点,一个月就是8640个点。把这8640个点,按照降序排列,把前......
  • redis查询端口与密码以及连通性测试方法
    目录一.端口查找二.密码查找三.连通性测试前言:redis的配置信息都在redis.conf文件里面,可以通过find/-nameredis.conf 进行查找文件存放位置,然后进入redis.conf文件进行查看一.端口查找1.使用命令 ps-ef|grepredis进行查找,示例6450/6451均为redis......
  • Linux根据服务查找端口的方法
    1.用ps-ef|grep服务名查找进程号,以查询tomcat服务为例,查询出来的进程号为553002.用netstat-anop|grep进程号方式查询端口,得知该端口为:90903.也可用端口号使用命令 losf -i:端口号查询该端口是否存在服务进程......
  • InfluxDB 常用基本配置,启用账号密码登录,配置指定端口登录
    打开安装目录下的influxdb.conf找到http节点 配置完成后再安装目录下使用命令启动influxdbinfluxd--configinfluxdb.conf启动完成后,基本配置安装部署已结束以下为常见的操作指令:#登录指定ip端口的influxdbinflux-host1.0.0.5-port8086#显示用户SHOWUSERS......