目标整理666+JS工具。不定期持续更新中
1.返回数组中的最大值
1 | // 将Math.max()与扩展运算符 (...) 结合使用以获取数组中的最大值。 |
2.返回数组中的最小值
1 | // 将Math.min()与扩展运算符 (...) 结合使用以获取数组中的最小值。 |
3.将数组块划分为指定大小的较小数组
1 | // 使用Array.from()创建新的数组, 这符合将生成的区块数。使用Array.slice()将新数组的每个元素映射到size长度的区块。如果原始数组不能均匀拆分, 则最终的块将包含剩余的元素。 |
4.从数组中移除 false 值
1 | // 使用Array.filter()筛选出 false 值 (false、null、0、""、undefined和NaN). |
5.计算数组中值的出现次数
1 | // 使用Array.reduce()在每次遇到数组中的特定值时递增计数器。 |
6.深拼合数组
1 | // 使用递归。使用Array.concat()与空数组 ([]) 和跨页运算符 (...) 来拼合数组。递归拼合作为数组的每个元素。 |
7.返回两个数组之间的差异
1 | // 从b创建Set, 然后使用Array.filter() on 只保留a b中不包含的值. |
8.返回数组的所有不同值
1 | // 使用 ES6 Set和...rest运算符放弃所有重复的值。 |
9.返回数组中的每个第 n 个元素
1 | // 使用Array.filter()创建一个包含给定数组的每个第 n 个元素的新数组。 |
10.筛选出数组中的非唯一值
1 | // 对于只包含唯一值的数组, 请使用Array.filter()。 |
11.拼合数组
1 | // 使用Array.reduce()获取数组中的所有元素和concat()以拼合它们 |
12.将数组向上拼合到指定深度
1 | // 使用递归, 递减depth, 每层深度为1。使用Array.reduce()和Array.concat()来合并元素或数组。基本情况下, 对于等于1的depth停止递归。省略第二个元素,depth仅拼合到1的深度 (单个拼合)。 |
13.根据给定函数对数组元素进行分组
1 | // 使用递归, 递减depth, 每层深度为1。使用Array.reduce()和Array.concat()来合并元素或数组。基本情况下, 对于等于1的depth停止递归。省略第二个元素,depth仅拼合到1的深度 (单个拼合)。 |
14.返回列表的头
1 | // 使用arr[0]可返回传递的数组的第一个元素。 |
15.返回除最后一个数组之外的所有元素
1 | // 使用 "arr.slice(0,-1)" 返回数组的最后一个元素。 |
16.初始化并填充具有指定值的数组
1 | // 使用Array(n)创建所需长度的数组,fill(v)以填充所需的值。可以省略value以使用默认值0. |
17.返回两个数组中存在的元素的列表
1 | // 从b创建Set, 然后使用Array.filter()on a只保留b中包含的值. |
18.返回数组中的最后一个元素
1 | // 使用arr.length - 1可计算给定数组的最后一个元素的索引并返回它 |
19.使用函数将数组的值映射到对象, 其中键值对由原始值作为键和映射值组成
1 | // 使用匿名内部函数范围来声明未定义的内存空间, 使用闭包来存储返回值。使用新的Array可将该数组与函数的映射放在其数据集上, 而逗号运算符返回第二个步骤, 而不需要从一个上下文移动到另一个环境 (由于关闭和操作顺序)。 |
20nthElement: 返回数组的第 n 个元素
1 | // 使用Array.slice()可获取包含第 n 个元素的数组。如果索引超出界限, 则返回[]。省略第二个参数n, 以获取数组的第一个元素 |
21.从对象中选取对应于给定键的键值对
1 | // 使用Array.reduce()将筛选/选取的密钥转换回具有相应键值对的对象 (如果在 obj 中存在该键)。 |
22.对原始数组进行变异, 以筛选出指定的值
1 | // 使用Array.filter()和Array.includes()来拉出不需要的值。使用Array.length = 0可将传入的数组中的长度重置为零, 并将其设置为Array.push(), 以便仅使用所提取的值填充它。 |
23.从数组中移除给定函数返回false的元素
1 | // 使用Array.filter()查找返回 truthy 值的数组元素和Array.reduce()以使用Array.splice()删除元素。使用三参数 (func value, index, array调用函数). |
24.返回数组中的随机元素
1 | // 使用Math.random()生成一个随机数, 将它与length相乘, 并使用数学将其舍入到最接近的整数Math.floor()。此方法也适用于字符串 |
25.随机数组值的顺序
1 | // 使用Array.sort()可在比较器中使用Math.random()重新排序元素。 |
26.返回数组中包含某元素的数组
1 | // 从每个数组创建一个Set, 然后对它们中的每一个都使用Array.filter(), 以便只保留其他值中不包含的数值。 |
27.返回两个数组之间的对称差(通俗可以理解交接的反义词)
1 | // 从每个数组创建一个Set, 然后对它们中的每一个都使用Array.filter(), 以便只保留其他值中不包含的数值。 |
28.返回数组(除第一个)中的所有元素
1 | // 如果数组的length大于1, 则返回arr.slice(1), 否则返回整个数组。 |
29.返回一个数组(0-n)
1 | // 使用Array.slice()创建数组的切片, 其中包含从开始处取出的n元素 |
30.返回一个数组(从第n个开始)
1 | // 使用Array.slice()创建数组的切片, 其中包含从末尾取出的n元素 |
31.返回在两个数组(并集)元素
1 | // 创建一个Set, 其中包含a和b的所有值, 并将其转换为数组。 |
32.筛选出数组中包含指定值之一的元素
1 | // 使用Array.filter()创建不包括的数组 (使用!Array.includes()) 所有给定值。 |
33.创建基于原始数组中的位置分组的元素数组
1 | // 使用Math.max.apply()获取参数中最长的数组。创建一个以该长度为返回值的数组, 并使用 map 函数创建一个分组元素的数组Array.from()如果参数数组的长度不同, 则在未找到任何值的情况下使用undefined。 |
34.数组中删除指定一项
1 | const removeArrayItem = (arr, item) => { |
35.检查给定数组中是否包含某项
1 | // 检查给定数组中是否包含某 |
44.返回当前url
1 | const currentURL = () => window.location.href; |
45.获取url参数
1 | let getUrlParam = (name, origin = null) => { |
46.修改url中的参数
1 | const replaceParamVal = (paramName,replaceWith) => { |
47.获取窗口可视范围的高度
1 | const getClientHeight = () => { |
48.获取窗口可视范围宽度
1 | const getPageViewWidth = () => { |
49.获取窗口宽度
1 | const getPageWidth = () => { |
50.获取窗口尺寸
1 | const getViewportOffset = () => { |
50.获取滚动条距顶部高度
1 | const getPageScrollTop = () => document.documentElement.scrollTop || document.body.scrollTop |
51.获取滚动条距左边的高度
1 | const getPageScrollLeft = () => document.documentElement.scrollLeft || document.body.scrollLeft |
52.全屏开启/关闭
1 | # 开启 |
53.当前滚动条位置
1 | const getScrollPosition = (el = window) => {x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop } |
54.滚动到指定元素区域
1 | const smoothScroll = element =>{ |
55.http跳转https
1 | const httpsRedirect = () => location.protocol !== 'https:' && location.replace('https://' + location.href.split('//')[1]) |
56.检查页面底部是否可见
1 | const bottomVisible = () => document.documentElement.clientHeight + window.scrollY >= (document.documentElement.scrollHeight || document.documentElement.clientHeight) |
57.打开一个窗口
1 | const openWindow(url, windowName, width, height) => { |
58.自适应页面(rem)
1 | const AutoResponse = (width = 750) => { |
59.截取字符串并加身略号
1 | const subText = (str, length) => str?.length && str?.length > length ? str.substr(0, length) + "..." : str |
60.获取文件base64编码
1 | /** |
61.B转换到KB,MB,GB并保留两位小数
1 | /** |
62.base64转file
1 | /** |
63.base64转blob
1 | /** |
64.blob转file
1 | /** |
65.file转base64
1 | /** |
66.递归生成树形结构
1 | const getTreeData = (data, pid, pidName = 'parentId', idName = 'id', childrenName = 'children', key) => { |
67.遍历树节点
1 | const foreachTree = (data, childrenName = 'children', callback) => { |
68.寻找所有子节点
1 | const traceChildNode = (id, data, pidName = 'parentId', idName = 'id', childrenName = 'children') => { |
69.根据pid生成树形结构
1 | /** |
70.查询数组中是否存在某个元素并返回元素第一次出现的下标
1 | /** |
71.Windows根据详细版本号判断当前系统名称
1 | /** |
72.判断手机是Andoird还是IOS
1 | /** |
73.函数防抖
1 | /** |
74.函数节流
1 | /** |
75.生成指定范围随机数
1 | const RandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min |
76.数组乱序
1 | const arrScrambling = arr => { |
77.数组交集
1 | const similarity = (arr1, arr2) => arr1.filter(v => arr2.includes(v)) |
78.加法函数(精度丢失问题)
1 | const add = (arg1, arg2) => { |
79.减法函数(精度丢失问题)
1 | const sub = (arg1, arg2) => { |
79.除法函数(精度丢失问题)
1 | const division = (num1,num2) => { |
80.乘法函数(精度丢失问题)
1 | const mcl = (num1,num2) => { |
81.递归优化(尾递归)
1 | /** |
82.生成随机整数
1 | const randomNumInteger = (min, max) => { |
83.去除空格
1 | /** |
84.大小写转换
1 | /** |
85.随机16进制颜色
1 | /** |
86.转义html(防XSS攻击)
1 | const escapeHTML = str => str.replace(/[&<>'"]/g, tag => ({'&': '&','<': '<','>': '>',"'": ''','"': '"' }[tag] || tag) ) |
87.检测移动/PC设备
1 | const detectDeviceType = () => { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop'; }; |
88.隐藏所有指定标签
1 | const hideTag = (...el) => [...el].forEach(e => (e.style.display = 'none')) |
89.查是否包含子元素
1 | const elementContains = (parent, child) => parent !== child && parent.contains(child) |
90.数字超过规定大小加上加号“+”,如数字超过99显示99+
1 | /** |
91.如何隐藏所有指定的元素
1 | const hide = (el) => Array.from(el).forEach(e => (e.style.display = 'none')) |
92.如何检查元素是否具有指定的类
1 | const hasClass = (el, className) => el.classList.contains(className) |
93.如何切换一个元素的类
1 | const toggleClass = (el, className) => el.classList.toggle(className) |
94.如何检查父元素是否包含子元素
1 | const elementContains = (parent, child) => parent !== child && parent.contains(child); |
95.如何检查指定的元素在视口中是否可见
1 | const elementIsVisibleInViewport = (el, partiallyVisible = false) => { |
96.如何获取元素中的所有图像
1 | const getImages = (el, includeDuplicates = false) => { |
97.如何将一组表单元素转化为对象
1 | const formToObject = form => Array.from(new FormData(form)).reduce((acc, [key, value]) => ({ ...acc, [key]: value }),{} ); |
98.如何从对象检索给定选择器指示的一组属性
1 | const get = (from, ...selectors) => [...selectors].map(s => s.replace(/\[([^\[\]]*)\]/g, '.$1.') .filter(t => t !== '') .reduce((prev, cur) => prev && prev[cur], from)); |
99.如何在等待指定时间后调用提供的函数(sleep、delay)
1 | const delay = (fn, wait, ...args) => setTimeout(fn, wait, ...args); |
100.如何在给定元素上触发特定事件且能选择地传递自定义数据
1 | const triggerEvent = (el, eventType, detail) => |
101.如何从元素中移除事件监听器
1 | const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts); |
102.如何获得给定毫秒数的可读格式
1 | const formatDuration = ms => { |
103.如何获得两个日期之间的差异
1 | // 以天为单位 |
104.如何对传递的URL发出请求
1 | // GET |
105.如何为指定选择器创建具有指定范围,步长和持续时间的计数器
1 | const counter = (selector, start, end, step = 1, duration = 2000) => { |
106.如何将字符串复制到剪贴板
1 | const copyToClipboard = str => { |
107.如何确定页面的浏览器选项卡是否聚焦
1 | const isBrowserTabFocused = () => !document.hidden; |
108.如何创建目录(如果不存在)
1 | const fs = require('fs'); |
109.日期型函数封装
1 | const formatTime = date => { |
110.时间戳转时间
1 | /** |
111.格式化时间,转化为(几秒/分钟/小时/天) 前
1 | /** |
112.获取n天之前的日期(10天前)
1 | /** |
113.获取跳转的classId,通过hash方式获取
1 | const getQueryString = () => { |
114.过滤器指定字段
1 | const filterArrBySex = (data, name) => { |
115.根据身份证获数据(取出生年月/年龄)
1 | // 取出生年月 |
116.原生js滑块验证
1 | //event.clientX:鼠标点下的点到左侧x轴的距离 |
117.js无限加载瀑布
1 | //随机[m,n]之间的整数 封装 |
118.是否为外链
1 | const isExternal = path => /^(https?:|mailto:|tel:)/.test(path) |
119.数字且最多两位小数
1 | const isNum = str => /^\d+(\.\d{1,2})?$/.test(str) |
120.判断经纬度
1 | /** |
121.数组去重
1 | // 方法一 |
121.数组取值
1 | // 最大值 |
121.扁平化
1 | // 最大值 |
122.数组乱排
1 | // 洗牌算法 |
123.数组乱排
1 | // 洗牌算法 |