2022 年 项目中常用的工具函数

news2024/11/26 2:37:13

目录

        • 1. 数字千分位化,支持保留小数点
        • 2. 前端生成 uuid
        • 3. 传入日期换算出是周几
        • 4. 通过计算 text-indent 偏移的负值,实现文字居右隐藏, 右侧对齐 ...text
        • 5. 时间格式化函数
        • 6. 防抖和节流
        • 7. 前端文件流下载
        • 8. 后端返回 无格式化时间处理为格式化 20220101123030 --->2022.01.01 12:30:30
        • 9.数组对象,根据指定属性名去重
        • 10. 数组对象中,提取相同属性的值的集合。 text、text2、text3
        • 11. 扁平化树形

1. 数字千分位化,支持保留小数点

/**
 * @description 数字千分位化,保留小数点
 * @param {any} num 数字入参
 * @param {Boolean} point 是否保留小数点
 * @returns
 */
export const formatNumByThousands = (num, point = true) => {
  if (!Number(num)) {
    return Number(num) === 0 ? '0' : '--'
  }
  num = parseFloat((num + '').replace(/(\.\d{2})\d+$/, '$1'))
    .toFixed(1)
    .toString()
    .split('.')
  num[0] = num[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)', 'ig'), '$1,')
  return point ? num.join('.') : num[0]
}

2. 前端生成 uuid

/**
 * @description 前端生成唯一 uuid
 * @returns string
 */
export const getUuid = () => {
  let d = new Date().getTime()
  if (window.performance && typeof window.performance.now === 'function') {
    d += performance.now() // use high-precision timer if available
  }
  const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = (d + Math.random() * 16) % 16 | 0 // d是随机种子
    d = Math.floor(d / 16)
    return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16)
  })
  return uuid
}

3. 传入日期换算出是周几

/**
 * @description 传入日期换算出是周几
 * @param {string } dateStr
 * @returns  string
 */
export const getWeekName = dateStr => {
  const week = new Date(dateStr).getDay()
  return '周' + '日一二三四五六'.charAt(week)
}

4. 通过计算 text-indent 偏移的负值,实现文字居右隐藏, 右侧对齐 …text

/**
 * @description 计算 text-indent 负值数。实现文字居右隐藏。 ...text
 * @param {string} maxWidth- 容器宽度
 * @param {string} text- 展示的总文字
 * @returns
 * 注意,此处的计算方式里,fontSize 为 14px
 */
export const getTextHideWidth = (maxWidth = 0, text) => {
  const IsIE = () => !!window.ActiveXObject || 'ActiveXObject' in window
  const div = document.createElement('div')
  div.style.display = 'inline-block'
  div.style.position = 'absolute'
  div.style.height = '0'
  div.style.fontSize = '14px'
  div.innerText = text
  document.body.appendChild(div)
  const { width } = div.getBoundingClientRect(),
    w = Math.ceil(width)
  if (IsIE()) div.removeNode(true)
  else div.remove()
  if (w <= maxWidth) return 0
  return w - maxWidth
}

在这里插入图片描述
使用:
在这里插入图片描述
在这里插入图片描述
… 三点省略符通过,css 伪元素实现
在这里插入图片描述

5. 时间格式化函数

/**
 * 时间格式化函数
 * 使用 formatDate(new date(), 'yyyyMMdd hhmmss')
 */
export const formatDate = (date, fmt) => {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
    }
  }
  return fmt
}

6. 防抖和节流

/**
 * 防抖
 * delay 默认 300
 * 使用 debounce(fn, delay)
 */
export const debounce = (() => {
  let timer = null
  return (fn, delay = 300) => {
    timer && clearTimeout(timer)
    timer = setTimeout(fn, delay)
  }
})()

/**
 * 节流
 * 使用 throttle(fn, delay)
 */
export const throttle = (fn, delay) => {
  let timer = null
  return function () {
    const that = this
    if (!timer) {
      timer = setTimeout(function () {
        fn.apply(that, arguments)
        timer = null
      }, delay)
    }
  }
}

7. 前端文件流下载

// 文件下载处理
export const downloadFile = (fileData, fileName) => {
  if (window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveBlob(fileData)
  } else {
    const link = document.createElement('a')
    document.body.appendChild(link)
    link.href = window.URL.createObjectURL(fileData)
    link.download = decodeURIComponent(fileName)
    link.click()
    window.URL.revokeObjectURL(link.href)
    document.body.removeChild(link)
  }
}

使用:

if (res.data && !res.data.Result) {
 Message({ type: 'success', message: '导出成功' })
 // 在 响应 header 里获取文件名称
 const fileName = res.headers['content-disposition'].split(';')[1].split('filename=')[1]
 downloadFile(res.data, fileName)
} else {
 Message.error('导出失败,请重试')
}

8. 后端返回 无格式化时间处理为格式化 20220101123030 —>2022.01.01 12:30:30

    // 格式化时间展示
    formatResultDate (time) {
      return (
        time.substr(0, 4) +
        '.' +
        time.substr(4, 2) +
        '.' +
        time.substr(6, 2) +
        ' ' +
        time.substr(8, 2) +
        ':' +
        time.substr(10, 2) +
        ':' +
        time.substr(12, 2)
      )
    },

9.数组对象,根据指定属性名去重

// 数组对象根据指定属性名去重
export const arrDistinctByProp = (arr, propName) => {
  return arr.filter(function (item, index, self) {
    return self.findIndex(el => el[propName] === item[propName]) === index
  })
}

使用
// 通过 id 去重

    const fileList = this.allFile.filter(item => item.parentId === data.id)
    this.activeFileList = arrDistinctByProp([...fileList], 'id')

10. 数组对象中,提取相同属性的值的集合。 text、text2、text3

// 获取数据对象中,某个属性的值集合
/**
 *
 * @param {*} arr 原数组
 * @param {*} propName 属性名称
 * @returns
 */
export const getListGroupText = (arr, propName) => {
  if (!Array.isArray(arr)) {
    return '--'
  }
  const textArr = arr.map(item => item[propName])
  return textArr.join('、')
}

11. 扁平化树形

    // 扁平化树形
    flatChild (arr) {
      const that = this
      const resultArr = []
      arr.forEach(item => {
        resultArr.push([{ name: item.name, treeLevel: item.treeLevel }])
        if (item.children && item.children.length) {
          resultArr.push(that.flatChild(item.children))
        }
      })
      // console.log(resultArr.flat(Infinity))
      return resultArr.flat(Infinity)
    }

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

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

相关文章

回收租赁商城系统功能拆解03讲-商品分类

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

【C语言进阶】指针进阶-回调函数

作者:匿名者Unit 目录一.函数指针数组1.定义2.转移表二.回调函数1.定义2.qsort的使用3.冒泡模拟实现qsort一.函数指针数组 1.定义 在之前我们已经了解过了函数指针: int(*p)(int,int)&add;我们还可以将函数的地址存放在数组&#xff0c;也就是函数指针数组 int (*p[10…

Qt音视频开发10-ffmpeg内核硬解码

一、前言 为了极大的降低CPU的占用&#xff0c;实现硬解码&#xff08;也叫硬件加速&#xff09;非常有必要&#xff0c;一个视频文件或者一路视频流还好&#xff0c;如果增加到64路视频流呢&#xff0c;如果是4K、8K这种高分辨率的视频呢&#xff0c;必须安装上硬解码才是上上…

初始Spring

初始Spring SSM框架的老大是&#xff1a;Spring大管家&#xff0c;无处不在 Spring是应用了很多优秀的设计模式,对于项目的实现,提供了优秀的解决方案;Spring是一个轻量级(低侵入) 框架.类与类之间的解耦合 IOC控制反转 实现大管家 AOP 增强&#xff0c;面向切面编程&…

QT—QPalette调色板类

Qt提供的调色板类QPalette专门用于管理部件的外观显示&#xff0c;相当于部件或对话框的调色板&#xff0c;管理他们所有的颜色信息。每个部件都包含一个QPalette对象&#xff0c;在显示时&#xff0c;按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。示例点击左…

C语言-数据的存储-浮点数的存储(8.2)​​​​​​​

目录​​​​​​​ 思维导图&#xff1a; 浮点型在内存中的存储 1.1一个经典的例子 1.2 浮点数存储规则 1.3实践举例 写在最后&#xff1a; 思维导图&#xff1a; 浮点型在内存中的存储 1.1一个经典的例子 #include <stdio.h>int main() {int n 9;//以整形的形式…

SHELL脚本学习 --- 第七次作业(awk)

SHELL脚本学习 — 第七次作业 思路&#xff1a; 1&#xff0c;df -h获取磁盘情况&#xff0c;先用grep过滤出根分区所属行&#xff0c;然后awk打印相应的域 2&#xff0c;首先把多个空格缩成一个&#xff0c;然后用grep找到ens160所属的IP&#xff0c;在awk中使用正则匹配inet…

C++ STL 容器类和迭代器

一、STL容器类 1.1 STL介绍 容器就是盛放东西的东西&#xff0c;这里被盛放的一般是数据对象&#xff0c;用来盛放的是容器类容器类的内核就是&#xff1a;数据结构 算法STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)算法(algorithm)迭代器(it…

在泰国旅居的第5天,我定了两个新目标

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群我在12月14号写了2023年&#xff0c;重新扬帆起航&#xff01;&#xff0c;里面说了2023年开始全球旅居办公&#xff0c;而在元旦…

历史大讲堂:这是老古董 苹果第一代Macintosh详解

还记得这个苹果吗&#xff1f;这是美国苹果公司的图标。今天我们就来借着苹果最出名的第一代个人电脑唠一唠苹果的前世今生。 这一代个人电脑 已经有鼠标了&#xff08;右下角&#xff09;&#xff0c;虽然非常的古老 macOS第一代系统就运行在这个上。这里我们也来唠一唠Macin…

Spring Boot学习笔记(十二)Spring Boot整合Quartz

一、自定义配置类 不使用springBoot的自动配置类&#xff0c;而是自定义配置类。 1、导入依赖 pom文件&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…

Android---Toolbar

目录 Toolbar Toolbar 加上 menu Toolbar 设置 Theme 完整 Demo Toolbar Toolbar 是在 Android 5.0 开始推出的一个 Materal Design 风格的导航控件 &#xff0c;Google 非常推荐大家使用 Toobar 来作为 Android 客户端的导航栏&#xff0c;以此来取代之前的 Actionbar。与 …

联想昭阳E4电脑U盘安装Win10系统操作教学

联想昭阳E4电脑U盘安装Win10系统操作教学分享。有用户想要将自己的联想昭阳E4电脑重装到Win10系统来使用。那么今天教大家一个U盘重装系统的方法&#xff0c;使用这个方法能够在系统出现问题的时候进行系统的重置&#xff0c;解决系统问题。一起来看看具体的重装教学吧。 准备工…

Exynos_4412——PWM实验

目录 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 无源蜂鸣器 1.2使用GPIO控制 1.3PWM控制 1.4PWM参数 周期​ 占空比 二、Exynos_4412下的PWM控制器 三、PWM寄存器详解 四、PWM编程 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 有源蜂鸣器只要接上额定电源就可以发…

主流的4种跨隔离网文件摆渡方式对比介绍

网络上承载了太多企业的业务&#xff0c;其安全性一定要得到保障&#xff0c;所以很多企业和机构都会选择将网络进行隔离划分&#xff0c;比如内外网隔离&#xff0c;办公网、研发网隔离等&#xff0c;也有不少企业会选择用云桌面的形式。 然而网络的建设就是为了互通的&#x…

【学vue跟玩一样】快速搞懂vue渲染

Vue的渲染分为条件渲染和列表渲染&#xff0c;那究竟什么式渲染呢?1.条件渲染1.v-if写法:(1)v-if"表达式"(2)v-else-if"表达式"(3)v-else"表达式"&#xff08;和我们曾经学过的JavaScript里面的if语句几乎一样&#xff09;适用于:切换频率较低的…

React umi中使用sass

umi默认支持less和css&#xff0c;如果想要使用sass&#xff0c;需要安装插件以及配置 一、安装umi的sass插件 yarn add umijs/plugin-sass 二、安装sass依赖 yarn add sass-loader node-sass 三、配置sass 在config/config.js或者 .umirc.ts文件中配置如下&#xff1a; sa…

linux 卸载elasticsearch及安装elasticsearch8.5(rpm)

目录 卸载elasticsearch rpm安装elasticsearch8.5 卸载elasticsearch # 检查elasticsearch服务状态 systemctl status elasticsearch.service; # 停止elasticsearch服务状态 systemctl stop elasticsearch.service; # 剔除elasticsearch服务 systemctl disable elasticsea…

宏任务和微任务JS执行顺序题目+总结

宏任务和微任务 resolve&#xff08;传的参数&#xff09;标记成功&#xff0c;会调用promise.then 练习网站&#xff1a; 关于promise深入理解太长没来及看 博客文章&#xff1a; promise本身是同步的&#xff0c;then/catch的回调函数是异步的 直接做题加深理解 点常见面…

漱玉转债,合力转债上市价格预测

漱玉转债基本信息转债名称&#xff1a;漱玉转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.0亿元。正股名称&#xff1a;漱玉平民&#xff0c;今日收盘价&#xff1a;18.1&#xff0c;转股价格&#xff1a;21.27。当前转股价值 转债面值 / 转股价格 *…