js 之中常用快速处理方法

2024-03-27 06:10

本文主要是介绍js 之中常用快速处理方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • js之中骚操作语法
      • 把字符串类型直接转化为 布尔类型
      • 把对象的属性值设置为空
      • 把日期替换为字符串格式
      • js处理 url
  • js 之中常用的快速技巧方法
    • 格式化input输入框
      • 限制input只能输入正整整
    • 日期相关
      • 选中当前时间的上一天
      • 1680254063618 毫秒 处理时间 17分钟 || 20小时 20天
    • 数组相关
      • 数组的最大值 & 最小值
      • 数组的去重
      • 数组对象去重
      • 求数组的总和(元素为对象 -> 累计对象中的金额属性)
    • 字符串相关
      • 判断 某个字符串是否包含另一个字符串
      • 数组的交集
      • 数组交集 a和b数组 a若有check为true则修改b的check为true,其余的修改为false
    • 个人信息相关
      • 从身份证号码中解析出生日期
    • 校验相关
      • 密码校验
    • 处理 tree数据 扁平化tree 或者 一维数组转化为tree数据
      • tree数据 扁平化 为一维数组
      • 一维数组 组合 为 tree数据

js之中骚操作语法

把字符串类型直接转化为 布尔类型

  • 执行思路:+ ‘0’ 转化为num类型 -> !! 双重否定 直接把num类型转化为bool类型
!!+0 -> false
!!+'0' -> false
!!+1 -> true
!!+'1' -> true

把对象的属性值设置为空

      let obj = { a:"aaa", b:"bbb", c:"ccc"};Object.keys(obj).forEach(key=>{obj[key]=''})console.log("obj", obj); // obj {a: '', b: '', c: ''}

把日期替换为字符串格式

("2021-01-12").replace(/\-/g, "")
'20210112'

js处理 url

const url = 'http://example.com/index.html?a=1&b=2&c=3&d=true'
const res = getQueryString(url)
console.log('res', res) // res {a: '1', b: '2', c: '3', d: 'true'}function getQueryString(url: any) {const idx = url.indexOf('?')const urlParam = url.substr(idx + 1, url.length)let urlObj = {}let urlObjItem = urlParam.length ? urlParam.split('&') : [] // 取得每一个参数项,let item = nulllet len = urlObjItem.lengthfor (let i = 0; i < len; i++) {item = urlObjItem[i].split('=')var name = decodeURIComponent(item[0]),value = decodeURIComponent(item[1])if (name) {urlObj[name] = value}}return urlObj
}

js 之中常用的快速技巧方法

格式化input输入框

限制input只能输入正整整

<template>value - {{ value }}<a-input placeholder="请输入" v-model.trim="value" @input="limitInpNum()" />
</template>
export default {name: "About2",components: {},data() {return {value: "",};},methods: {// 限制input只能输入整数limitInpNum() {// console.log("this.value前", this.value); //this.value前 11elet res = /^\d*$/.test(this.value);if (!res) this.value = this.value.replace(/[^\d]/g, "");// console.log("this.value后", this.value); //this.value前 11},},
};

日期相关

选中当前时间的上一天

    // 获取前一天的日期getTodayDate() {let date2 = new Date(new Date(new Date().toLocaleDateString()).getTime());let year = date2.getFullYear();let momth = date2.getMonth() + 1;momth = momth < 10 ? "0" + momth : momth;let date = date2.getDate() - 1;date = date < 10 ? "0" + date : date;return year + "-" + momth + "-" + date;},

1680254063618 毫秒 处理时间 17分钟 || 20小时 20天

        // 处理时间 17分钟 || 20小时 20天dealTimeNum(timestamp) {// console.log('timestamp', timestamp);let res = '';let date = new Date(Number(timestamp));let now = new Date();let diff = now.getTime() - date.getTime(); // 获取两个日期对象之间的毫秒差let days = Math.floor(diff / (1000 * 60 * 60 * 24)); // 将毫秒差转换为天数let hours = Math.floor(diff / (1000 * 60 * 60)); // 将毫秒差转换为小时let minute = Math.floor(diff / (1000 * 60)); // 将毫秒差转换为分钟let second = Math.floor(diff / (1000)); // 将毫秒差转换为秒// console.log('days', days, 'hours', hours, 'minute', minute);if (days > 0) {res = days + '天';} else if (hours > 0) {res = hours + '小时';} else if (minute > 0) {res = minute + '分钟';} else if (second > 0) {res = minute + '秒';}// console.log('res', res);return res;}

数组相关

数组的最大值 & 最小值

    let arr = [100,888,2,5555,33,-111,7];let max = Math.max.apply(null,arr);let min = Math.min.apply(null,arr)console.log('max',max,"min",min); // test.html:13 max 5555 min -111let Data=[{city:'w',收入:16.5},{city:'x',收入:14.5},{city:'e',收入:17.5},{city:'a',收入:1.5},{city:'y',收入:31.5},]let arr=[];for(let i=0;i<Data.length;i++){arr.push(Data[i]['收入']);}var max=Math.max(...arr);console.log(max)// 31.5

数组的去重

    let res = [1,222,333,555,1,222,99,33]let res1 = res.reduce(function (pre, cur) {return (pre.indexOf(cur) === -1) ? pre.concat(cur) : pre //满足pre这个数组的属性,有属于这个条件的时候,就返回到新数组内}, [])console.log('res1', res1); // [1, 222, 333, 555, 99, 33]

数组对象去重

const arr = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 1, name: 'Charlie' },{ id: 3, name: 'David' },{ id: 2, name: 'Eve' }
];const uniqueArr = Array.from(new Set(arr.map(item => item.id))).map(id => arr.find(item => item.id === id));console.log(uniqueArr);
// Output: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'David' }]

求数组的总和(元素为对象 -> 累计对象中的金额属性)

  let arr = [ { val:1 }, { val:2} ]let sum = arr.reduce(function (pre, cur) {return pre + cur.val* 1;}, 0);// sum 为3

字符串相关

判断 某个字符串是否包含另一个字符串

  • !== -1 证明找得到该字符串
let str = "123"
console.log(str.indexOf("2") != -1); // true

数组的交集

      const a = [{ id: 1, a: 123, b: 1234 }, { id: 2, a: 123, b: 1234 }]const b = [{ id: 1, a: 123, b: 1234 }, { id: 2, a: 123, b: 1234 }, { id: 3, a: 123, b: 1234 }, { id: 4, a: 123, b: 1234 }]const arr2 = [...b].filter(x => [...a].some(y => y.id === x.id))console.log('arr2', arr2) // [ {id: 1, a: 123, b: 1234},{id: 2, a: 123, b: 1234}]

数组交集 a和b数组 a若有check为true则修改b的check为true,其余的修改为false

      // let a = [{ id: 1, check: true}, { id: 2,check: true}];// let b = [{ id: 1, check: true }, { id: 2, check: true }, { id: 3, check: true }, { id: 4, check: true }];// b.forEach(itemB => {//   itemB.check = a.some(itemA => itemA.id === itemB.id) ? true : false;// });// console.log(b); // [{ id: 1, check: true }, { id: 2, check: true }, { id: 3, check: false}, { id: 4, check: false}];

个人信息相关

从身份证号码中解析出生日期

/*** 从身份证号码中解析出生日期* @param certNo* @returns {string} YYYY-MM-DD的格式*/
export function resolveBirthdayFromCertNo(certNo) {try {var birthdayif (certNo) {certNo = certNo.toString()if (certNo.length === 15) {// 15位身份证,第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期birthday = '19' + certNo.substring(6, 8) + '-' + certNo.substring(8, 10) + '-' + certNo.substring(10, 12)} else if (certNo && certNo.length === 18) {// 18位身份证,第7、8、9、10位为出生年份(四位数),第11、第12位为出生月份,第13、14位代表出生日期birthday = certNo.substring(6, 10) + '-' + certNo.substring(10, 12) + '-' + certNo.substring(12, 14)}}return birthday} catch (e) {console.error(e)}
}

校验相关

密码校验

/*** 密码校验* 至少1个大写字母English letter,(?=.*?[A-Z])* 至少1个小写英文字母,(?=.*?[a-z])* 至少1位数字,(?=.*?[0-9])* 至少有1个特殊字符,(?=.*?[#?!@$%^&*-])* 最小8个长度.{8,}* @param str* @returns {boolean}*/
export function validatePassword(str) {const reg = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-,.;':"]).{8,}$/return reg.test(str)
}

处理 tree数据 扁平化tree 或者 一维数组转化为tree数据

tree数据 扁平化 为一维数组

  created() {const treeData = [{path: 'home',title: '首页',com: 'Home'},{path: 'about',title: '关于',children: [{path: 'about1',title: '关于1',children: [{path: 'about11',title: '关于11',com: 'About11'},{path: 'about12',title: '关于12',com: 'About12'}]},{path: 'about2',title: '关于2',com: 'About2'}]},{path: 'user',title: '用户',children: [{path: 'user1',title: '用户1',children: [{path: 'user11',title: '用户11',com: 'User11'},{path: 'user12',title: '用户12',com: 'User12'}]},{path: 'user2',title: '用户2',com: 'User2'}]}]const res = this.treeToOneArr(treeData)console.log('res', res, 'treeData', treeData)},methods: {treeToOneArr(arr) {const data = JSON.parse(JSON.stringify(arr)) // 对传入的参数进行深拷贝const newData = [] // 创建空数组用来接收操作后的新数组const hasChildren = item => {// 递归遍历,把包含children的选项拿出来,push到之前新建的空数组内(item.children || (item.children = [])).map(v => {hasChildren(v)})delete item.children // 删除原children属性,可选项newData.push(item)}data.map(v => hasChildren(v))return newData},}

在这里插入图片描述

  • 扁平化数据 方法2
    treeToArray(tree) {var res = []for (const item of tree) {const { child, ...i } = itemif (child && child.length) {res = res.concat(this.treeToArray(child))}res.push(i)}return res}

一维数组 组合 为 tree数据

  created() {const treeData = [{ 'id': 6, 'title': '首页', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/home' },{ 'id': 1, 'title': '物业管理', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/estate1' },{ 'id': 2, 'title': '费用管理', 'leave': 2, 'order': 1, 'parent_id': 1, 'url': 'estate' },{ 'id': 3, 'title': '临时收费', 'leave': 3, 'order': 1, 'parent_id': 2, 'url': 'charge' },{ 'id': 4, 'title': '物业费', 'leave': 3, 'order': 2, 'parent_id': 2, 'url': 'propertyFees' },{ 'id': 5, 'title': '关于', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/about' }]const res = this.treeData(treeData)console.log('res', res, 'treeData', treeData)},methods: {treeData(data) {// 对源数据深度克隆const cloneData = JSON.parse(JSON.stringify(data))// filter嵌套filter相当于for循环嵌套for循环const result = cloneData.filter(parent => {// 返回每一项的子级数组const branchArr = cloneData.filter(child => parent.id === child.parent_id)// 若子级存在,则给子级排序;且,赋值给父级if (branchArr.length > 0) {branchArr.sort(this.compare('order'))parent.children = branchArr}// 返回最高的父级,即,parent_id为0,return parent.parent_id === 0})// 给最高级的父级排序result.sort(this.compare('order'))return result},// 对象数组排序compare(property) {return function(a, b) {const value1 = a[property]const value2 = b[property]return value1 - value2// 升序,降序为value2 - value1}},}
  • 效果
[{ 'id': 6, 'title': '首页', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/home' },{ 'id': 1, 'title': '物业管理', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/estate1',children:[{ 'id': 2, 'title': '费用管理', 'leave': 2, 'order': 1, 'parent_id': 1, 'url': 'estate',children:[{ 'id': 3, 'title': '临时收费', 'leave': 3, 'order': 1, 'parent_id': 2, 'url': 'charge' },{ 'id': 4, 'title': '物业费', 'leave': 3, 'order': 2, 'parent_id': 2, 'url': 'propertyFees' },]}]},{ 'id': 5, 'title': '关于', 'leave': 1, 'order': 1, 'parent_id': 0, 'url': '/about' }
]

这篇关于js 之中常用快速处理方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851176

相关文章

Python中CSV文件处理全攻略

《Python中CSV文件处理全攻略》在数据处理和存储领域,CSV格式凭借其简单高效的特性,成为了电子表格和数据库中常用的文件格式,Python的csv模块为操作CSV文件提供了强大的支持,本文将深入... 目录一、CSV 格式简介二、csv模块核心内容(一)模块函数(二)模块类(三)模块常量(四)模块异常

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模