js的一些工具函数以及方法

news2025/2/12 16:16:45

部分方法复制于:20 个 JS 工具函数助力高效开发

reduce

举例:数组求和

  1. let a=[1,3,6,5,7];
    let init=0;//累加的初始值,默认为0,可不写
    let b=a.reduce((pre,cur,index,arr)=>{
        console.log('当前要加序号:',index);
        console.log('之前累加:',pre);
        console.log('当前要加:',cur);
        console.log('原始属组:',arr);
        console.log('---------');
        return pre+cur;//必须要有返回值,否则循环走到第二步的时候,pre=undefined
    },init)//这里的init可以省略
    console.log('全部累加:',b)

参数解析:

  1. pre:必填,表示上一次累加求和的返回值;
            若存在init,则初始值=init;
    若不存在init,则初始值=a[0]
  2. cur:必填,表示当前要累加的数组元素;
  3. index:可选,表示当前要累加的数组元素下标;
    若存在init,则index初始值=0;
    若不存在init,则index初始值=1;
  4. arr:可选,表示当前要处理的原始数组;
  5. init:可选,表示累加的初始值。

实现效果如下图:
 

at:获取数组指定位置的数据

const array = [ 'fatfish', 'medium', 'blog', 'fat', 'fish' ]
console.log(array.at(-1));//fish
console.log(array.at(-2));//fat
console.log(array.at(-3));//blog


console.log(array.at(-0));//fafish
console.log(array.at(1));//medium

typeOf:校验数据类型

export const typeOf = function(obj) {
  return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
}

使用:typeOf(123);//number

手机号脱敏:

export const hideMobile = (mobile) => {
  return mobile.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2")
}

使用:hideMobile('18012345678'); //180****5678

显示全屏:

export const launchFullscreen = (element) => {
  if (element.requestFullscreen) {
    element.requestFullscreen()
  } else if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen()
  } else if (element.msRequestFullscreen) {
    element.msRequestFullscreen()
  } else if (element.webkitRequestFullscreen) {
    element.webkitRequestFullScreen()
  }
}

关闭全屏:

export const exitFullscreen = () => {
  if (document.exitFullscreen) {
    document.exitFullscreen()
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen()
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen()
  } else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen()
  }
}

大小写转换: 

export const turnCase = (str, type) => {
  switch (type) {
    case 1:
      return str.toUpperCase()
    case 2:
      return str.toLowerCase()
    case 3:
      //return str[0].toUpperCase() + str.substr(1).toLowerCase() // substr 已不推荐使用
      return str[0].toUpperCase() + str.substring(1).toLowerCase()
    default:
      return str
  }
}

str: 待转换的字符串

type :1-全大写 2-全小写 3-首字母大写

使用:

  • turnCase('vue',1);//VUE
  • turnCase('Vue',2);//vue
  • turnCase('vue',3);//Vue

解析URL参数:

export const getSearchParams = () => {
  const searchPar = new URLSearchParams(window.location.search)
  const paramsObj = {}
  for (const [key, value] of searchPar.entries()) {
    paramsObj[key] = value
  }
  return paramsObj
}

使用:getSearchParams();//假如当前地址栏链接为https://****.com?a=1,此处输入{a:1}
 

判断手机是安卓还是iOS:

export const getOSType=() => {
  let u = navigator.userAgent, app = navigator.appVersion;
  let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
  let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  if (isIOS) {
    return 1;
  }
  if (isAndroid) {
    return 2;
  }
  return 3;
}

数组对象根据字段去重:

export const uniqueArrayObject = (arr = [], key = 'id') => {
  if (arr.length === 0) return
  let list = []
  const map = {}
  arr.forEach((item) => {
    if (!map[item[key]]) {
      map[item[key]] = item
    }
  })
  list = Object.values(map)

  return list
}

使用:

假设
let a=[{id:1,text:'this is a'},{id:2,text:'this is b'},{id:3,text:'this is c'},{id:1,text:'this is aa'},
{id:2,text:'this is bb'},{id:3,text:'this is cc'}]

uniqueArrayObject(a,'id');//[{id:1,text:'this is a'},{id:2,text:'this is b'},{id:3,text:'this is c'}]

滚动到页面顶部:

export const scrollToTop = () => {
  const height = document.documentElement.scrollTop || document.body.scrollTop;
  if (height > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, height - height / 8);
  }
}

滚动到指定元素为止:

export const smoothScroll = element =>{
    document.querySelector(element).scrollIntoView({
        behavior: 'smooth'
    });
};

使用:smoothScroll('#app'); 

金额格式化:

export const moneyFormat = (number, decimals, dec_point, thousands_sep) => {
  number = (number + '').replace(/[^0-9+-Ee.]/g, '')
  const n = !isFinite(+number) ? 0 : +number
  const prec = !isFinite(+decimals) ? 2 : Math.abs(decimals)
  const sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep
  const dec = typeof dec_point === 'undefined' ? '.' : dec_point
  let s = ''
  const toFixedFix = function(n, prec) {
    const k = Math.pow(10, prec)
    return '' + Math.ceil(n * k) / k
  }
  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
  const re = /(-?\d+)(\d{3})/
  while (re.test(s[0])) {
    s[0] = s[0].replace(re, '$1' + sep + '$2')
  }

  if ((s[1] || '').length < prec) {
    s[1] = s[1] || ''
    s[1] += new Array(prec - s[1].length + 1).join('0')
  }
  return s.join(dec)
}

说明:

        number:要格式化的数字

  • decimals:保留几位小数

  • dec_point:小数点符号

  • thousands_sep:千分位符号

  • 使用:

  • moneyFormat(10000000) // 10,000,000.00
    moneyFormat(10000000, 3, '.', '-') // 10-000-000.000

下载文件:

export const downloadFile = (api, params, fileName, type = 'get') => {
  axios({
    method: type,
    url: api,
    responseType: 'blob', 
    params: params
  }).then((res) => {
    let str = res.headers['content-disposition']
    if (!res || !str) {
      return
    }
    let suffix = ''
    // 截取文件名和文件类型
    if (str.lastIndexOf('.')) {
      fileName ? '' : fileName = decodeURI(str.substring(str.indexOf('=') + 1, str.lastIndexOf('.')))
      suffix = str.substring(str.lastIndexOf('.'), str.length)
    }
    //  如果支持微软的文件下载方式(ie10+浏览器)
    if (window.navigator.msSaveBlob) {
      try {
        const blobObject = new Blob([res.data]);
        window.navigator.msSaveBlob(blobObject, fileName + suffix);
      } catch (e) {
        console.log(e);
      }
    } else {
      //  其他浏览器
      let url = window.URL.createObjectURL(res.data)
      let link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', fileName + suffix)
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)
      window.URL.revokeObjectURL(link.href);
    }
  }).catch((err) => {
    console.log(err.message);
  })
}

使用:downloadFile('/api/download', {params}, '文件名')​​​​​​​

模糊搜索:

export const fuzzyQuery = (list, keyWord, attribute = 'name') => {
  const reg = new RegExp(keyWord)
  const arr = []
  for (let i = 0; i < list.length; i++) {
    if (reg.test(list[i][attribute])) {
      arr.push(list[i])
    }
  }
  return arr
}

说明:

  • list 原数组

  • keyWord 查询的关键词

  • attribute 数组需要检索属性

  • 使用:

  • 假如:

  • const list = [
      { id: 1, name: '树哥' },
      { id: 2, name: '黄老爷' },
      { id: 3, name: '张麻子' },
      { id: 4, name: '汤师爷' },
      { id: 5, name: '胡万' },
      { id: 6, name: '花姐' },
      { id: 7, name: '小梅' }
    ]
    fuzzyQuery(list, '树', 'name') // [{id: 1, name: '树哥'}]


     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

左右排版的PDF,如何转换为单栏排版的word?

将左右排版的PDF转换为单行排版的WORD文字版需要进行以下步骤&#xff1a; 1. 使用PDF转换工具将PDF转换为WORD格式。有很多在线或离线的PDF转WORD工具可供选择&#xff0c;例如金鸣表格文字识别、Adobe Acrobat、Smallpdf、Zamzar等。 2. 打开WORD文档后&#xff0c;选择“页…

24个Jvm面试题总结及答案

1.什么是Java虚拟机&#xff1f;为什么Java被称作是“平台无关的编程语言”&#xff1f; Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台&#xff0c;而不需要程序员为每…

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我&#xff0c;歌曲的歌词和评论怎么生成词云图&#xff0c;想买代码… 当时我就拒绝了&#xff0c;直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例&#xff0c;要对《青花瓷》歌词…

Nacos架构与原理 - 注册中心服务数据模型(2.x版本)

文章目录 服务&#xff08;Service&#xff09;和服务实例&#xff08;Instance&#xff09;定义服务服务元数据定义实例实例元数据持久化属性 集群&#xff08;Cluster&#xff09;定义集群 生命周期服务的⽣命周期实例的⽣命周期集群的⽣命周期元数据的⽣命周期 服务&#xf…

DM Ticket-大麦网自动购票工具 支持Docker一键部署

DM Ticket-大麦网自动购票工具 支持Docker一键部署 DM Ticket&#xff0c;一个大麦网演唱会自动购票工具&#xff0c;支持Docker一键部署&#xff0c;不过小白想要操作的话需要一点命令知识&#xff0c;作者的GitHub项目页面有很详细的介绍&#xff0c;感兴趣的同学可以到GitH…

反汇编分析——全局、局部、静态、堆变量

在可执行文件编译的时候就已经存储在固定的位置了&#xff0c;甚至还可以跨文件共享&#xff0c;因为他本身就是静态的&#xff0c;固定在文件当中的嘛 反汇编窗口就是直接拿指针解引用&#xff0c;也就是拿这个地址来访问的&#xff0c;直接寻址 自动变量&#xff0c;不用我们…

C# .NET ADO.NET介绍和如何使用

文章目录 环境配置ADO.NET简介ADO.NET是什么面向过程和面向对象什么是ORM ADO.NET用于解决什么问题优化开发效率对已存在的数据库&#xff0c;设计多个程序对开发中的程序&#xff0c;动态设计数据库&#xff0c;同步更新 ADO.NET如何使用&#xff0c;以sql server为例ADO.NET如…

多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab哈里斯鹰算法(HHO)优化随机森林的数据回归预测,HHO-RF回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清…

IPV6综合实验

拓扑结构&#xff1a; 要求&#xff1a; 1、两个局域网基于6 to 4 tunnel可达&#xff0c;公网使用IPV4地址 2、R1可以访问R3的环回 3、保障网络更新安全&#xff0c;全网可达 使用的设备&#xff1a;8台路由器 解决网络拓扑&#xff1a; 1、确定广播域的个数 2、分配网段 …

react---pubsub-js消息订阅与发布

pubsub是一个用Javascript编写的基于主题的发布/订阅库&#xff0c;适用于任意组件间的通信&#xff0c;需要先订阅再发布 &#xff0c;在组件即将卸载时钩子函数中进行取消订阅。 1. 在线文档: https://github.com/mroderick/PubSubJS 2. 下载: 【npm install pubsub-js --sav…

MySQL数据库备份和还原

备份对于数据库而言是至关重要的。当数据文件发生损坏、MySQL服务出现错误、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时&#xff0c;使用一种有效的数据备份方案&#xff0c;就可以快速解决以上所有的问题。MySQL提供了多种备份方案&#xff0c;包括&#xff1a;逻辑…

机器学习—逻辑回归

练习2&#xff1a;逻辑回归 介绍 在本练习中&#xff0c;您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法&#xff0c;来提高算法的鲁棒性&#xff0c;并用更复杂的情形来测试模型算法。 在开始练习前&#xff0c;需要下载如下的文件进行数据上…

自学黑客【网络安全】,一般人我还是劝你算了吧

十多年前还是高中生的时候开始搞安全的&#xff0c;刚开始是看大佬们在群里发黑页觉得很牛逼。然后慢慢开始学&#xff0c;当时还在网上问过IP和ID有什么区别&#xff0c;&#xff0c;&#xff0c; 后来慢慢开始学注入&#xff0c;日到了第一个站&#xff0c;是家卖钢琴的。放…

Linux 一“文”搞定Shell编程

又到了毕业季&#xff0c;又得去找实习工作。。。 最近在某直聘软件上找实习工作&#xff0c;看到有许多工作都需要会Shell编程的&#xff0c;然后自己对Shell编程也是一知半解&#xff0c;所以趁着最后还有半个月在校时间&#xff0c;索性学习一下&#xff01; Shell是一个命…

Apache Hadoop概述

Hadoop是一个开源的分布式计算框架&#xff0c;它可以处理大规模的数据集。Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce编程模型。HDFS是一个高度容错性的系统&#xff0c;可以在数百台服务器上存储PB级别的数据。MapReduce是一种编程模型&#xff0c;它可…

css基础知识二:CSS选择器有哪些?优先级?哪些属性可以继承?

一、选择器 CSS选择器是CSS规则的第一部分 它是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式 选择器所选择的元素&#xff0c;叫做“选择器的对象” 我们从一个Html结构开始 <div id"box"><div class"o…

k8s 探针

1.前言 Kubernetes探针(Probe)是用于检查容器运行状况的一种机制。探针可以检查容器是否正在运行&#xff0c;容器是否能够正常响应请求&#xff0c;以及容器内部的应用程序是否正常运行等。在Kubernetes中&#xff0c;探针可以用于确定容器的健康状态&#xff0c;如果容器的健…

Prometheus+Grafana安装极简教程

目录 初始化监控主机 安装go环境 安装Prometheus 安装Grafana 初始化被监控主机 监控主机配置监控被监控主机 课后 初始化监控主机 安装go环境 下载对应的go版本&#xff0c;解压&#xff0c;设置环境变量 export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin 执…

alist与Raidrive配置开机自动启动,开机就可以拥有网盘硬盘!

目录 1. alist配置为开机自动启动服务1.1 制作一个alist启动命令行1.2 将VBS添加到开机启动项 2. Raidrive设置开机启动2.1 进入设置2.2 添加到启动项 总结 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 欢迎关注 『发现你走远了』 博客&#xff0c;持续更新中 1. al…

大数据治理入门系列:数据质量

无论您是数据领域的专业人员&#xff0c;还是其他领域的非专业人士&#xff0c;也许都曾遇到过数据不完整、数据过时、数据不一致、数据不准确等问题。这些低质量的数据不仅没能解决最初的疑问&#xff0c;甚至还可能衍生出了其他问题。质量低劣的数据会影响数据分析结果&#…