锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

JavaScript工具函数(一)

时间:2023-01-16 18:00:00 g108电容

JavaScript工具函数

    • 1.匹配正整数
    • 2.负整数匹配
    • 3.匹配整数
    • 4.匹配非负浮点数
    • 5.匹配由 26 由英文字母组成的字符串
    • 6.匹配由 26 由英文字母大写组成的字符串
    • 7.匹配由 26 由英文字母小写组成的字符串
    • 8.匹配电子邮件地址
    • 9.返回数组中最大值
    • 10.返回数组中的最小值
    • 11.将数组块划分为指定大小的较小数组
    • 12.从数组中移除 falsey 值
    • 13.计算数组中值的出现次数
    • 14.数组合数组
    • 15.返回两个数组之间的差异
    • 16.返回数组的所有不同值
    • 17.返回数组中的每个第 n 个元素
    • 18.筛选数组中的非唯一值
    • 20.拼合数组
    • 21.将数组向上拼合到指定深度
    • 22.根据给定函数对数组元素进行分组
    • 23.返回列表头
    • 24.返回除最后一个数组以外的所有元素
    • 25.初始化并填充具有指定值的数组
    • 26.初始化并填充具有指定值的数组
    • 27.返回两个数组中存在的元素列表
    • 28.返回数组中的最后一个元素
    • 29.使用函数将数组的值映射到对象, 键值由原始值和映射值组成
    • 30.nthElement: 返回数组第 n 个元素
    • 31.从对象中选择对应给定键的键值
    • 32.变异原始数组, 筛选指定值
    • 33.从数组中移除给定函数返回false的元素
    • 34.返回数组中的随机元素
    • 35.随机数组值的顺序
    • 36.返回两个数组中显示的元素的数组
    • 37.返回两个数组之间的对称差
    • 38.返回数组中的所有元素, 除第一个
    • 39.返回数组, 其中 n 从一开始就去除个元素
    • 40.返回一个数组, 其中 n 从末尾移除个元素
    • 41.返回两个数组中任何一个中存在的每个元素
    • 42.筛选数组中指定值之一的元素
    • 43.创建基于原始数组中位置分组的元素数组
    • 44.从给定数组中删除一个项目
    • 45.检查给定数组中是否包含某项
    • 46.验证不能包含字母
    • 47.验证中文和数字
    • 48.验证邮政编码(中国)
    • 49.验证微信号,6-20位,从字母开始,字母,数字,减号,下划线
    • 50.验证16进制颜色
    • 51.验证列车次数
    • 52.验证手机身码(IMEI)
    • 53.验证必须有端口号的网站(或ip)
    • 54.验证网站(支持端口和"? 参数"和"# 参数)
    • 55.验证统一的社会信用代码
    • 56.验证快雷链接
    • 57.验证ed2k链接(宽松匹配)
    • 58.验证磁链接(宽松匹配)
    • 59.验证子网掩码
    • 60.验证linux"文件夹"路径
    • 61.验证linux"文件"路径
    • 62.验证window"文件夹"路径
    • 63.验证window下"文件"路径
    • 64.验证股票代码(A股)
    • 65.验证版本号格式必须是X.Y.Z
    • 66.验证视频链接地址(视频格式可按需增删)
    • 67.验证图片链接地址(图片格式可按需增删)
    • 68.验证银行卡号(10到30位, 覆盖公私账户, 参考微信支付)
    • 69.验证中文名称
    • 70.验证英文名称
    • 71.验证车牌号(新能源)
    • 72.验证车牌号(非新能源)
    • 73.验证车牌号(新能源) 非新能源)
    • 74.验证中国手机号(严谨), 根据工信部2019年最新发布的手机号段
    • 75.验证中国手机号(宽松), 从13、14、15、16、17、18、19开始
    • 76.验证email(邮箱)
    • 77.验证座机电话(国内),如: 0341-86091234
    • 78.验证身份证号码(1代,15位数字)
    • 79.验证身份证号码(2代,18位),最后一位是验证位,可能是数字或字符X
    • 80.验证身份证号, 支持1/2代(15位/18位数字)
    • 81.验证护照(包括香港和澳门)
    • 82.验证账号是否合法(字母开头,允许5-16字节,允许字母数字下划线组合
    • 83.验证中文/汉字
    • 84.验证小数
    • 85.验证数字
    • 86.验证qq号格式
    • 87.验证数字和字母的组成
    • 88.验证英文字母
    • 89.验证大写英文字母
    • 90.验证小写英文字母
    • 91.返回当前url
    • 92.获取url参数(第一种)
    • 93.获取url参数(第二种)
    • 94.修改url中的参数
    • 95.删除url中指定的参数
    • 96.获取窗口可视范围的高度
    • 97.获取窗口可视宽度
    • 98.获取窗宽
    • 99.获取窗口尺寸
    • 100.获取滚动条距顶部高度
    • 101.获得滚动条距左侧的高度
    • 102.开启全屏
    • 103.关闭全屏
    • 104.返回当前滚动条的位置
    • 105.滚动到指定元素区域
    • 106.平滑滚动到页面顶部
    • 107.http跳转https
    • 108.检查页面底部是否可见
    • 109.打开窗户
    • 110.自适应页面(rem)
    • 日期工具date工具函数
    • 111.浏览器存储storage工具函数
    • 112.localStorage 存贮
    • 113.localStorage 获取
    • 114.localStorage 移除
    • 115.localStorage 存储一段时间失效
    • 116.sessionStorage 存贮
    • 117.sessionStorage 获取
    • 118.sessionStorage 删除
    • 119.sessionStorage 存储一段时间失效
    • 120.cookie 存贮
    • 121.cookie 获取
    • 122.cookie 删除
    • 123.更多的工具函数
    • 124.钱格式化,三个加逗号
    • 125.截取字符串并添加略号
    • 126.获取文件base64编码
    • 127.B转换到KB,MB,GB并保留两位小数
    • 128.base64转file
    • 129.base64转blob
    • 130.blob转file
    • 131.file转base64
    • 132.递归生成树形结构
    • 133.遍历树节点
    • 134.追溯父节点
    • 135.寻找所有子节点
    • 136.根据pid形成树形结构
    • 137.查询数组中是否存在某一元素并返回元素的第一次下标
    • 138.Windows根据详细版本号判断当前系统名称
    • 判断手机是Andoird还是IOS
    • 140.函数防抖
    • 145.函数节流
    • 146.判断数据类型
    • 147.生成指定范围随机数
    • 148.数组乱序
    • 150.数组交集
    • 151.数组中某元素出现的次数
    • 152.加法函数(精度丢失问题)
    • 153.减法函数(精度丢失问题)
    • 154.除法函数(精度丢失问题)
    • 155.乘法函数(精度丢失问题)
    • 156.递归优化(尾递归)
    • 157.生成随机整数
    • 158.去除空格
    • 159.大小写转换
    • 160.随机16进制颜色 hexColor
    • 161.随机16进制颜色 randomHexColorCode
    • 162.转义html(防XSS攻击)
    • 163.检测移动/PC设备
    • 165.返回指定元素的生效样式
    • 166.检查是否包含子元素
    • 167.数字超过规定大小加上加号“+”,如数字超过99显示99+
    • 168.如何隐藏所有指定的元素
    • 169.如何检查元素是否具有指定的类?
    • 170.如何切换一个元素的类?
    • 171.如何获取当前页面的滚动位置?
    • 172.如何平滑滚动到页面顶部
    • 173.如何检查父元素是否包含子元素?
    • 174.如何检查指定的元素在视口中是否可见?
    • 175.如何获取元素中的所有图像?
    • 176.如何确定设备是移动设备还是台式机/笔记本电脑?
    • 177.How to get the current URL?
    • 178.如何创建一个包含当前URL参数的对象?
    • 179.如何将一组表单元素转化为对象?
    • 180.如何从对象检索给定选择器指示的一组属性?
    • 181.如何在等待指定时间后调用提供的函数?
    • 182.如何在给定元素上触发特定事件且能选择地传递自定义数据?
    • 183.如何从元素中移除事件监听器?
    • 184.如何获得给定毫秒数的可读格式?
    • 185.如何获得两个日期之间的差异(以天为单位)?
    • 186.如何向传递的URL发出GET请求?
    • 187.如何对传递的URL发出POST请求?
    • 188.如何为指定选择器创建具有指定范围,步长和持续时间的计数器?
    • 189.如何将字符串复制到剪贴板?
    • 190.如何确定页面的浏览器选项卡是否聚焦?
    • 191.如何创建目录(如果不存在)?
    • 192.日期型函数封装
    • 193.时间戳转时间
    • 194.js中获取上下文路径
    • 195.JS大小转化B KB MB GB的转化方法
    • 196.js全屏和退出全屏
    • 197.格式化时间,转化为几分钟前,几秒钟前
    • 198 获取n天之前的日期 getDaysBeforeDate(10) 10天前
    • 199.获取跳转的classId,通过hash方式获取
    • 200.过滤器指定字段
    • 201.根据身份证获取出生年月
    • 202.根据身份证获取年龄
    • vue购物车金额结算
    • 设置iframe高度
    • 回到顶部
    • urlAnalysis
    • 监听enter按下事件,页面跳转
    • showDate
    • 获取跳转的classId,通过hash方式获取
    • 203.原生js滑块验证
    • 204.纯 js无限加载瀑布(原创)
    • 205.jQuery两个元素比较高度
    • 206.js定时清除缓存,存储缓存,获取缓存
    • 207.数组降维
    • 208.设置cookie,获取cookie,删除cookie
    • 209.判读是否为外链
    • 210.校验密码是否小于6位
    • 211.判断是否为数字
    • 212.判断是否是名称
    • 213.判断是否为IP
    • 214.判断是否是传统网站
    • 215.判断是否是小写字母
    • 216.判断是否是大写字母
    • 217.判断是否是大写字母开头
    • 218.判断是否是字符串
    • 219.判断是否是数组
    • 220.判断是否是端口号
    • 221.判断是否是手机号
    • 222.判断是否是身份证号(第二代)
    • 223.判断是否是邮箱
    • 224.判断是否中文
    • 225.判断是否为空
    • 226.判断是否为固话
    • 227.判断是否为数字且最多两位小数
    • 228.判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)
    • 229.判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)
    • 230.rtsp校验只要有rtsp://
    • 231.判断IE浏览器版本和检测是否为非IE浏览器
    • 232.数组去重
      • 方案一:`Set + …`
      • 方案二:`Set + Array.from`
      • 方案三:双重遍历比对下标
      • 方案四:单遍历 + Object 特性
    • 233.查找数组最大
      • 方案一:`Math.max + …`
      • 方案二:`Math.max + apply`
      • 方案三:`Math.max` + 遍历
      • 方案四:比较、条件运算法 + 遍历
      • 方案五:排序
    • 234.查找数组最小
    • 237.返回两个数组中相同的元素
      • 方案一:filter + includes
      • 方案二:同理变种用 hash
    • 238.从右删除 n 个元素
      • 方案一:slice
      • 方案二: splice
      • 方案三: slice 另一种
      • 方案四: 修改 length
    • 239.截取第一个符合条件的元素及其以后的元素
      • 方案一:slice + 循环
      • 方案二:findIndex + slice
      • 方案三:splice + 循环
    • 240.返回数组中下标间隔 nth 的元素
      • 方案一:filter
      • 方案二:方案一修改判断条件
    • 241.返回数组中第 n 个元素(支持负数)
      • 方案一:slice
      • 方案二:三目运算符
    • 242.返回数组头元素
      • 方案一:
      • 方案二:
    • 243.返回数组末尾元素
      • 方案一:
      • 方案二:
    • 245.数组乱排
      • 方案一:洗牌算法
      • 方案二:sort + random
    • 246.伪数组转换为数组
      • 方案一:Array.from
      • 方案二:prototype.slice
      • 方案三:prototype.splice
    • 195.判读浏览器是否支持 CSS 属性
    • 247.返回当前网页地址
      • 方案一:location
      • 方案二:a 标签
    • 获取滚动条位置
    • 248.获取 url 中的参数
      • 方案一:正则 + reduce
      • 方案二:split + reduce
      • 方案三: URLSearchParams
    • 249.页面跳转,是否记录在 history 中
      • 方案一:
      • 方案二:
    • 250.滚动条回到顶部动画
      • 方案一: c - c / 8
    • 251.复制文本
      • 方案一:
      • 方案二:cliboard.js
    • 252.检测设备类型
      • 方案一: ua
      • 方案二:事件属性
    • 253.Cookie
      • 清空
    • 254.时间戳转换为时间
    • 获取当前时间戳
      • 方案一:Date.parse(new Date())
      • 方案二:Date.now()
      • 方案三:+new Date()
    • 255固定滚动条
    • 256 判断当前位置是否为页面底部
    • 257判断元素是否在可视范围内
    • 258.获取元素 css 样式
    • 259.进入全屏
    • 260退出全屏
    • 261全屏事件
    • 262.数字千分位分割
    • 263.生成随机数
    • 264 时间戳转时间
    • 265 过滤富文本和空格为纯文本
    • 266 指定显示的文字数量多余的使用省略号代替
    • 267 获取滚动条当前的位置
    • 268 获取当前可视范围的高度
    • 269 获取文档完整的高度
    • 1.邮箱
    • 2.手机号码
    • 3.电话号码
    • 4.是否url地址
    • 5.是否字符串
    • 6.是否数字
    • 7.是否boolean
    • 8.是否函数
    • 9.是否为null
    • 10.是否undefined
    • 11.是否对象
    • 12.是否数组
    • 13.是否时间
    • 14.是否正则
    • 15.是否错误对象
    • 16.是否Symbol函数
    • 17.是否Promise对象
    • 18.是否Set对象
    • 19.是否是微信浏览器
    • 20.是否是移动端
    • 21.是否是QQ浏览器
    • 22.是否是爬虫
    • 23.是否ios
    • 24.是否为PC端
    • 25.去除html标签
    • 26.获取url参数
    • 27.动态引入js
    • 28.根据url地址下载
    • 29.el是否包含某个class
    • 30.el添加某个class
    • 31.el去除某个class
    • 32.获取滚动的坐标
    • 33.滚动到顶部
    • 34.el是否在视口范围内
    • 35.洗牌算法随机
    • 36.拦截粘贴板
    • 37.判断类型集合
    • 38.严格的身份证校验
    • 39.随机数范围
    • 40.将阿拉伯数字翻译成中文的大写数字
    • 41.将数字转换为大写金额
    • 42.判断一个元素是否在数组中
    • 43.数组排序,{type} 1:从小到大 2:从大到小 3:随机
    • 44.去重
    • 45.求两个集合的并集
    • 46.求两个集合的交集
    • 47.删除其中一个元素
    • 48.将类数组转换为数组
    • 49.最大值
    • 50.最小值
    • 51.求和
    • 52.平均值
    • 53.去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格
    • 54.字符转换,type: 1:首字母大写 2:首字母小写 3:大小写转换 4:全部大写 5:全部小写
    • 55.检测密码强度
    • 56.函数节流器
    • 57.在字符串中插入新字符串
    • 58.判断两个对象是否键值相同
    • 59.16进制颜色转RGBRGBA字符串
    • 60.追加url参数

1.匹配正整数

// 匹配正整数
let isPositiveNum = val => { 
        
    return /^[1-9]d*$/.test(val);
};
console.log(isPositiveNum(9)) //true
console.log(isPositiveNum(2.2)) //false

2.匹配负整数

// 匹配负整数
 let isNegativeNum = val => { 
        
     return /^-[1-9]d*$/.test(val);
 };
 console.log(isNegativeNum(-9)) //true
 console.log(isNegativeNum(2.2)) //false

3.匹配整数

// 匹配整数
let isInteger = val => { 
        
    return /^(-|\+)?\d+$/.test(val);
};
console.log(isInteger(-9)) //true
console.log(isInteger(2.2)) //false

4.匹配非负浮点数

// 匹配非负浮点数
let isNotNegativeFloatNum = val => { 
        
    return /^\d+(\.\d+)?$/.test(val);
};
console.log(isNotNegativeFloatNum(-9)) //false
console.log(isNotNegativeFloatNum(2.2)) //true

5.匹配由 26 个英文字母组成的字符串

//匹配由 26 个英文字母组成的字符串
let isAZaz = val => { 
        
    return /^[A-Za-z]+$/.test(val);
};
console.log(isAZaz('122a')) //false
console.log(isAZaz('abc')) //true

6.匹配由 26 个英文字母的大写组成的字符串

//匹配由 26 个英文字母的大写组成的字符串
let isAZ = val => { 
        
    return /^[A-Z]+$/.test(val);
};
console.log(isAZ('Acs')) //false
console.log(isAZ('ABC')) //true

7.匹配由 26 个英文字母的小写组成的字符串

//匹配由 26 个英文字母的小写组成的字符串
let isaz = val => { 
        
    return /^[a-z]+$/.test(val);
};
console.log(isaz('Acs')) //false
console.log(isaz('abc')) //true

8.匹配电子邮件地址

// 匹配电子邮件地址
let isEmailAddress = val => { 
        
    return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(val) || /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/.test(val);
};
console.log(isEmailAddress('Acs')) //false
console.log(isEmailAddress('133@qq.com')) //true

9.返回数组中的最大值

// arrayMax: 返回数组中的最大值
// 将Math.max()与扩展运算符 (...) 结合使用以获取数组中的最大值。
let arrayMax = arr => Math.max(...arr);
let arr = [1,2,3,5];
console.log(arrayMax(arr)) //5

10.返回数组中的最小值

// arrayMin: 返回数组中的最小值
// 将Math.min()与扩展运算符 (...) 结合使用以获取数组中的最小值。
let arrayMin = arr => Math.min(...arr);
let arr = [1, 2, 3, 5];
console.log(arrayMin(arr)) //1

11.将数组块划分为指定大小的较小数组

// chunk: 将数组块划分为指定大小的较小数组。
// 使用Array.from()创建新的数组, 这符合将生成的区块数。使用Array.slice()将新数组的每个元素映射到size长度的区块。如果原始数组不能均匀拆分, 则最终的块将包含剩余的元素。
let chunk = (arr, size) => Array.from({ 
        
    length: Math.ceil(arr.length / size)
}, (v, i) => arr.slice(i * size, i * size + size));
let arr = [1, 2, 3, 5];
console.log(chunk(arr,2)) //0: Array [ 1, 2 ],1: Array [ 3, 5 ],

12.从数组中移除 falsey 值

// compact: 从数组中移除 falsey 值。
// 使用Array.filter()筛选出 falsey 值 (false、null、0、""、undefined和NaN).
let compact = arr => arr.filter(Boolean);
let arr = [false,null,0,"",undefined,NaN,1]
console.log(compact(arr)) //[ 1 ]

13.计算数组中值的出现次数

// countOccurrences: 计算数组中值的出现次数
// 使用Array.reduce()在每次遇到数组中的特定值时递增计数器。
let countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
let arr = [1,2,1,2,3,3,3,3];
console.log(countOccurrences(arr,3))//4

14.深拼合数组

// deepFlatten: 深拼合数组
// 使用递归。使用Array.concat()与空数组 ([]) 和跨页运算符 (...) 来拼合数组。递归拼合作为数组的每个元素。
let deepFlatten= arr => [].concat(...arr.map(v => Array.isArray(v) ? deepFlatten(v) : v));
let arr = [1, 2, [1, 2, [1, 2, [2, 3]]]];
console.log(deepFlatten(arr)) // [ 1, 2, 1, 2, 1, 2, 2, 3 ]

15.返回两个数组之间的差异

// difference: 返回两个数组之间的差异
// 从b创建Set, 然后使用Array.filter() on 只保留a b中不包含的值.
let difference = (a, b) => { 
        
    const s = new Set(b);
    return a.filter(x => !s.has(x));
};
let arr = [1,2,3];
let arr2 = [2,3,4];
console.log(difference(arr,arr2))//[1]
console.log(difference(arr2,arr))//[4]

16.返回数组的所有不同值

// distinctValuesOfArray: 返回数组的所有不同值
// 使用 ES6 Set和...rest运算符放弃所有重复的值。
let distinctValuesOfArray = arr => [...new Set(arr)];
let arr = [1, 2, 3, 1, 2];
console.log(distinctValuesOfArray(arr)) // [ 1, 2, 3 ]

17.返回数组中的每个第 n 个元素

// everyNth: 返回数组中的每个第 n 个元素
// 使用Array.filter()创建一个包含给定数组的每个第 n 个元素的新数组。
let everyNth = (arr, nth) => arr.filter((e, i) => i % nth === 0);

18.筛选出数组中的非唯一值

// filterNonUnique:筛选出数组中的非唯一值
// 对于只包含唯一值的数组, 请使用Array.filter()。
let filterNonUnique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i));

20.拼合数组

// flatten: 拼合数组
// 使用Array.reduce()获取数组中的所有元素和concat()以拼合它们
let flatten = arr => arr.reduce((a, v) => a.concat(v), []);

21.将数组向上拼合到指定深度

// falttenDepth: 将数组向上拼合到指定深度
// 使用递归, 递减depth, 每层深度为1。使用Array.reduce()和Array.concat()来合并元素或数组。基本情况下, 对于等于1的depth停止递归。省略第二个元素,depth仅拼合到1的深度 (单个拼合)。
// falttenDepth: (arr, depth = 1) => depth != 1 ? arr.reduce((a, v) => a.concat(Array.isArray(v) ? flattenDepth(v, depth - 1) : v), []) : arr.reduce((a, v) => a.concat(v), []),

22.根据给定函数对数组元素进行分组

// groupby: 根据给定函数对数组元素进行分组
// 使用Array.map()将数组的值映射到函数或属性名。使用Array.reduce()创建一个对象, 其中的键是从映射的结果生成的。
// groupBy: (arr, func) => arr.map(typeof func === 'function' ? func : val => val[func]).reduce((acc, val, i) => { acc[val] = (acc[val] || []).concat(arr[i]); return acc; }, {}),

23.返回列表的头

// head: 返回列表的头
// 使用arr[0]可返回传递的数组的第一个元素。
let head = arr => arr[0];

24.返回除最后一个数组之外的所有元素

// initial: 返回除最后一个数组之外的所有元素
// 使用 "arr.slice(0,-1)" 返回数组的最后一个元素。
let initial = arr => arr.slice(0, -1);

25.初始化并填充具有指定值的数组

// initializeArrayWithRange: 初始化并填充具有指定值的数组
// 使用Array(n)创建所需长度的数组,fill(v)以填充所需的值。可以省略value以使用默认值0.
let initializeArrayWithRange = (end, start = 0) => Array.from({ 
        
    length: end - start
}).map((v, i) => i + start);

26.初始化并填充具有指定值的数组

// initializeArrayWithValues: 初始化并填充具有指定值的数组
// 使用Array(n)创建所需长度的数组,fill(v)以填充所需的值。可以省略value以使用默认值0
let initializeArrayWithValues = (n, value = 0) => Array(n).fill(value);

27.返回两个数组中存在的元素的列表

// intersection: 返回两个数组中存在的元素的列表
// 从b创建Set, 然后使用Array.filter()on a只保留b中包含的值.
let intersection = (a, b)  

相关文章