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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可