2022年能让你早点下班的36个JavaScript实用函数!

js代码——36进制相加 题目描述: 36进制由0-9,a-z,共36个字符表示,最小为’0’ ‘0’'9’对应十进制的09,‘a’'z’对应十进制的1035 例如:‘1b’ 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47 要求按照加法规则计算出任意两个36进制正整数的和 如:按照加法规则,计算’1b’ + ‘2x’ = ‘48’ (要求:不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制) js代码: <script type="text/j 阅读详情

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 17 天,点击查看活动详情

之前在掘金写了一篇介绍 JavaScript 小技巧的文章,很受大家欢迎。但是有朋友说还是不够用,于是我决定再写一篇更多更全的文章。
原文:你需要知道的 12 个常用的 JavaScript 函数
原来是 12 个函数,现在直接乘以 3 倍,搞 36 个函数!
JavaScript 是一个很复杂的语言,很多新手在使用它开发应用的时候会发现很多功能无从下手。有了我根据功能分类总结的 36 个 JavaScript 技巧,复制粘贴一键搞定!
帮助你提高开发效率、快速解决问题,早点下班,早点摸鱼!

DOM 相关

1. 检测某个元素是否聚焦

const hasFocus = el => el === document.activeElement
复制代码

2. 获取某个元素所有的兄弟元素

const a = el => [].slice.call(el.parentNode.children).filter(child => child !== el)
复制代码

3. 获取当前选择的文本

const getSelectedText = () => window.getSelection().toString()
复制代码

4. 返回上一个页面

const goBack = () => history.go(-1)
复制代码

5. 获取所有 cookie 并转为对象

const getCookies = () => document.cookie
  .split(';')
  .map(item => item.split('='))
  .reduce((acc, [k, v]) => (acc[k.trim().replace('"', '')] =v) && acc, {})
复制代码

6. 清除所有 cookie

const clearCookies = () => document.cookie
  .split(';')
  .forEach(c => document.cookie = c.splace(/^+/, '')
          .replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`))
  )
复制代码

7. 将 URL 参数转换为对象

const getUrlParams = (query) =>Array.from(new URLSearchParams(query)).reduce((p, [k, v]) => Object.assign({}, p, { [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v }),{});
复制代码

8. 检测是否为暗模式

const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
复制代码

数组相关

9. 比较两个数组

const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
复制代码

10. 将数组转为对象

const arrayToObject = (arr, key) => arr.reduce((a, b) => ({ ...a, [b[key]]: b }), {});
复制代码

11. 将数组按照属性计数

const countBy = (arr, prop) => arr.reduce((prev, curr) => ((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev), {} );
复制代码

12. 判断数组是否不为空

const arrayIsNotEmpty = (arr) => Array.isArray(arr) && Object.keys(arr).length > 0;
复制代码

13. 展开多维数组

const flat_entries = arr => [].concat(...arr); 
复制代码

14. 获取数组最后一个元素

const lastItem = arr => arr.slice(-1)[0]
复制代码

对象相关

15. 检测多个对象是否相等

const isEqual = (...objects) => objects.every((obj) => JSON.stringify(obj) === JSON.stringify(objects[0]));
复制代码

16. 从对象数组中提取属性值

const pluck = (objs, property) => objs.map((obj) => obj[property]);
复制代码

17. 反转对象的 key value

const invert = (obj) => Object.keys(obj).reduce((res, k) => Object.assign(res, { [obj[k]]: k }), {});
复制代码

18. 从对象中删除值为 null 和 undefined 的属性

const removeNullAndUndefined = (obj) => 
Object.entries(obj) 
.reduce((a, [k, v]) => (v == null ? a : ((a[k] = v), a)), {});
复制代码

19. 按照对象的属性对对象排序

const sort = (obj) => Object
  .keys(obj) 
  .sort() 
  .reduce((p, c) => ((p[c] = obj[c]), p), {});
复制代码

20. 检测对象是否为数组

const isArray = (obj) => Array.isArray(obj);
复制代码

21. 检测对象是否为 Promise

const isPromise = (obj) => 
!!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
复制代码

22. 交换两个对象

const exchange = (a, b) => [a, b] = [b, a]
复制代码

字符串相关

23. 检查路径是否是相对路径

const isRelative = (path) => !/^([az]+:)?[\\/]/i.test(path);
复制代码

24. 将字符串的第一个字符变小写

const lowercaseFirst = (str) => `${str.charAt(0).toLowerCase()}${str.slice(1)}`;
复制代码

25. 重复一个字符串

const repeat = (str, numberOfTimes) => str.repeat(numberOfTimes);
复制代码

26. 生成 IP 地址

const randomIp = () => Array(4).fill(0) 
.map((_, i) => Math.floor(Math.random() * 255) + (i === 0 ? 1 : 0) ) 
.join('.');
复制代码

27. 生成十六进制颜色字符串

const randomColor = () => `#${Math.random().toString(16).slice(2, 8).padEnd(6, '0')}`;
复制代码

28. 生成 rgb 颜色字符串

const randomRgbColor = () => `rgb(${Math.floor(Math.random()*255)}, ${Math.floor(Math.random()*255)}, ${Math.floor(Math.random()*255)})`
复制代码

29. 下划线转驼峰

const toHump = str => str.replace(/\_(\w)/g, (all, letter) => letter.toUpperCase());
复制代码

30. 驼峰转下划线横线

const toLine = str => str.replace(/([A-Z])/g,"_$1").toLowerCase()
复制代码

31. 检查字符串是否是十六进制颜色

const isHexColor = (color) => /^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i.test(color);
复制代码

32. RGB 字符串转十六进制字符串

const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1) ;
复制代码

日期相关

33. 两个日期之间相差的天数

const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24));
复制代码

34. 检查日期是否有效

const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());
复制代码

其他

35. 检测代码是否处于 Node.js 环境

const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
复制代码

36. 检测代码是否处于浏览器环境

const isBrowser = typeof window === 'object' && typeof document === 'object';
复制代码

如果你也有一些常用的函数,或者文章中的某些函数有更好的实现方式,也可以进行补充!

来源:https://juejin.cn/post/7132019982644772901
js不常用但实用的JavaScript超级技巧 JavaScript 是一种应用场景多且功能强大的语言,对于现代 Web 开发至关重要。以下是一些超级技巧,它们将帮助你成为更高效、更有效的 JavaScript 开发人员,每个技巧都有详细的解释和示例。提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

相关推荐

伯德图逆向工程:用MATLAB从扫频数据中提取系统特性的5个关键步骤

本文详细介绍了使用MATLAB从扫频数据中提取系统特性的5个关键步骤,包括数据预处理、频响特性提取、相位解缠绕、系统特性反演和结果验证。通过伯德图逆向工程技术,工程师可以有效分析黑箱系统的频率响应特性,解决噪声干扰和相位跳变等实际问题,提升控制系统调试效率。

weixin_29081163的博客 195

能让你早点下班的36个JavaScript实用函数!

能让你早点下班的36个JavaScript实用函数!

JackChan 83

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 623

能让你早点下班的36个JavaScript实用函数!早点摸鱼、早点下班!

JavaScript 是一个很复杂的语言,很多新手在使用它开发应用的时候会发现很多功能无从下手。有了我根据功能分类总结的 36 个 JavaScript 技巧,复制粘贴一键搞定!帮助你提高开发效率、快速解决问题,早点下班,早点摸鱼!DOM 相关1. 检测某个元素是否聚焦const hasFocus = el => el === document.activeElement2. 获取某个元素所...

web全栈开发的博客 256

自动驾驶仿真(六)—— SIL软件在环仿真测试

自动驾驶仿真六—— SIL软件在环仿真测试1. 在环仿真测试2. SIL软件在环仿真测试2.1 模型配置参数2.2 S function生成实现2.3 结果对比3. 参考学习的书目教材 博主前面的博文已经简要介绍了Carsim、Prescan 与 Simulink 在 “V”型开发流程的一些应用,现今成熟的汽车控制系统软件都是以(Model Based Design,MBD)来开发,它以图形化的方式表达复杂的逻辑、代码可读性、可移植性、开发调试便利程度都大大增强,同时利用成熟的代码生成工具链,也避免了手工代

zhudj08的博客 8649

链式中介效应结果解读:从Bootstrap置信区间到实践意义

本文深入解析链式中介效应结果的解读方法,从Bootstrap置信区间的应用到实践意义的阐述。通过实际案例展示如何分析总效应、直接效应和间接效应,并强调效应量评估的重要性。文章还提供了构建逻辑解释的三步法,以及敏感性分析和报告撰写的实用技巧,帮助研究者准确解读链式中介效应。

weixin_33690367的博客 718

2023年能让你早点下班的36个JavaScript实用函数!

2023年能让你早点下班的36个JavaScript实用函数!

weixin_45821809的博客 330

SQL面试题——最大连续登陆问题

最大连续登陆是我们计算比较常用的指标,我们可以将其当成一个经典的SQL模型,后面我们也会陆续总结出其他的模型,你还知道其他的比较经典的SQL 吗?欢迎分享,或者你还知道其他的关于计算连续的指标?最大连续登陆重要的是计算思想,最大连续才是关键,登陆只是一个场景,要学会举一反三。

9011

36个JavaScript实用函数

36个JavaScript实用函数

weixin_38984353的博客 413

Java零基础之多线程篇:线程间如何通信?

随着计算机技术的发展,多线程编程已经成为现代软件开发中的一个重要方向。在多线程编程中,线程间的通信是一个非常关键的问题。在Java开发语言中,Java提供了一些机制来实现线程间的通信,帮助开发者协调不同线程之间的执行顺序和数据交换。本文将介绍Java多线程编程中的线程间通信的相关知识。首先,我们将从简介开始,介绍线程间通信的基本概念和原理。然后,我们将通过源代码解析的方式,深入探讨Java中实现线程间通信的方法。接着,我们将给出一些应用场景案例,展示线程间通信在实际开发中的应用。

喵手的博客 1557

基于射频技术的校园无人超市管理系统_360

本设计实现了一种基于射频技术的校园无人超市管理系统,系统集成了环境监测与商品管理两大核心模块。在环境监测部分,采用DHT11温湿度传感器与MQ2烟雾传感器对超市内部环境进行实时监测,结合温控与报警机制,实现自动通风与烟雾报警功能,并通过1.44寸SPI LCD显示屏进行本地信息显示。商品管理部分基于RC522-RFID读卡器完成商品识别,结合Qt上位机软件实现顾客自助选购与结算,同时支持管理员进行商品入库与会员卡管理等操作。系统采用STM32F103RCT6为主控核心,结合串口通信方式与Qt开发的上位机进行

374

进阶 JavaScript 的 36 个概念

本文已经原作者授权 作者:Mahdhi Rezvi 译者:前端小智 来源:medium 原文:https://medium.com/better-programming/36-javascript-concepts-you-need-to-master-to-become-an-expert-c6630ac41bf4 点赞再看,微信搜索 【大迁世界】 关注这个没有大厂背景,但有着一股向上积极心态人。本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收

粉丝们务必加入微信粉丝群 3824

【Claude】组织级认证限制报错已解决(4 种)

报错被禁用的是什么谁能解除应急方案整个 Console 组织Anthropic 支持换账户 / 订阅凭证API key 认证方式你的组织管理员用订阅/login订阅 OAuth 登录你的组织管理员用 API keyRoutines 功能你的组织所有者手动计划任务替代共同排查模式/status确认当前凭证;检查环境变量;看清报错消息里命名的是什么(key?组织访问?),对症清除;管理员层面的限制,找管理员解锁。

博客 1万+

36个工作中常用的JavaScript函数片段

如果文章和笔记能带您一丝帮助或者启发,请不要吝啬你的赞和收藏,你的肯定是我前进的最大动力???? 附笔记链接,阅读往期更多优质文章可移步查看,喜欢的可以给我点赞鼓励哦:https://github.com/Wscats/CV/issues/32 数组 Array 数组去重 function noRepeat(arr) { return [...new Set(arr)]; } 查找数组最大 function arrayMax(arr) { return Math.max(...arr); }

Wscats 823

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

7种经常使用的Vue.js模式和36个实用Vue开发技巧,你知道多少?

7种Vue.js模式和36个Vue开发技巧,这篇文章一次和你说完!

weixin_52546522的博客 4389

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

js实现36进制

36进制 function getNums36() { var nums36 = []; for (var i = 0; i < 36; i++) { if (i >= 0 && i <= 9) { nums36.push(i); ...

Cupid 1605

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

死磕 36 个 JS 手写题

typeof 可以正确识别:Undefined、Boolean、Number、String、Symbol、Function 等类型的数据,但是对于其他的都会认为是 object,比如 Null、Date 等,所以通过 typeof 来判断数据类型会不准确。但是可以使用 Object.prototype.toString 实现。 继承 原型链继承 原型链继承存在的问题: 借用构造函数实现继承解决了原型链继承的 2 个问题:引用类型共享问题以及传参问题。但是由于方法必须定义在构造函数中,所以会导致每次创建子类

chao 1760

关于 JavaScript 的36道题 [ JavaScript Puzzlers! ]

最近在微博上发现了一个网站 [ http://javascript-puzzlers.herokuapp.com/ ] 是关于 JavaScript 的37道题, 于是尝试自己做了下, 挺不错的, 在此总结下小小的收获. ^-^.. 1.What is the result of this expression? (or multiple ones) ["1", "2", "3"].ma

彼岸の风的专栏 1529

要深入 JavaScript,你需要掌握这 36 个概念

你可能会经常听到一些人在抱怨 JS 很奇怪,有时甚至是一文不值。 之所以有这种想法,是因为他们不太了解 JS 背后的运作方式。 我也觉得 JS 在某些情况处理方式与其它语言不太一样,但这并不能怪它,它也只是以自己的方式展现给大家而已。 如果,你热爱一门编程语言,那么应该就会想深入了解并逐个掌握它的概念。 这里列出了36个JavaScript概念,你需要掌握这些概念才能成为一个更懂 JS 的前端开发者。 1.调用堆栈执行 我们都知道堆栈溢出,但是你知道堆栈溢出是由什么原因导致的吗? 堆栈溢出是与调用堆

JNPF快速开发平台的博客 282

36个JavaScript特效教程,学完即精通

目录:36个JavaScript特效教程,学完即精通 ┣━━01 简版计算器(js版).mp4 ┣━━02 网页日历开发过程(js版).mp4 ┣━━03 正则表达式的编写思路(js版).mp4 ┣━━04 通过Cookie用户自定义模板(bom版).mp4 ┣━━05 网页的弹窗广告位(bom版).mp4 ┣━━06 DOM动画在区域内的弹球(dom版).mp4 ┣━━07 动态创建表格(dom版).mp4 ┣━━08 跟随鼠标移动的图片(dom版).mp4 ┣━━09 固定导航栏(dom版).mp4 ┣

weixin_46241311的博客 936

2022年JavaScript的发展前景与格局如何?

根据我的个人经验,我知道React的Hooks和上Context API有多么强大,但它们也有自己的局限性。尽管Webpack的DevX受到了抱怨,但它在很长一段时间内都是最高的,而且在各大厂商中的使用率仍然是最高的。虽然GitHub星星是一个指标,但在JS状态调查中,Snowpack在兴趣榜上名列前茅,但更重要的是,它是满意度榜的联合榜首。在Web开发领域,我们的世界变化很快,通过仔细研究2020年开发者调查的数据,我们可以得知在2022JA的发展前景与格局究竟如何,下面就和小编一起来看看吧~

xuezhangmen的博客 717

36 * N 个工作中常用的 JavaScript 函数片段

最近在思否看到一个文章36个工作中常用的JavaScript函数片段。 身为坑爹面试官(▄█▀█●),怎么能只有一个答案呢? 数组 Array 数组去重 方案一:Set + ... function noRepeat(arr) { return [...new Set(arr)]; } noRepeat([1,2,3,1,2,3]) 方案二:Set + Array.from function noRepeat(arr) { return Array.from(new Set(arr

嘿嘿 153

死磕 36 个 JS 手写题(搞懂后,提升真的大)

死磕 36 个 JS 手写题(搞懂后,提升真的大) 为什么要写这类文章 作为一个程序员,代码能力毋庸置疑是非常非常重要的,就像现在为什么大厂面试基本都问什么 API 怎么实现可见其重要性。我想说的是居然手写这么重要,那我们就必须掌握它,所以文章标题用了死磕,一点也不过分,也希望不被认为是标题党。 作为一个普通前端,我是真的写不出 Promise A+ 规范,但是没关系,我们可以站在巨人的肩膀上,要相信我们现在要走的路,前人都走过,所以可以找找现在社区已经存在的那些优秀的文章,比如工业聚大佬写的 100 行代

牛牪犇 2994
上一篇: JavaScript 数组结构与树结构的转换
下一篇: 你不能只会flex居中布局,精制动画讲解所有flex布局方式!通俗易懂纯干货教程!...
码趣资源网
博客等级 码龄4年 268粉丝 518原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值