提高工作效率的JavaScript单行代码

在这里插入图片描述

摘要:

平时在根据ui设计图处理数据的时候,需要用到js的一些方法!所以这里总结一些提高工作效率的JavaScript单行代码!

目录概览

      • 摘要:
      • `1.#生成随机字符串`
      • `2.# 转义HTML特殊字符`
      • `3.# 单词首字母大写`
      • `4.# 将字符串转换为小驼峰`
      • `5.# 删除数组中的重复值`
      • `6.# 铺平一个数组`
      • `7.# 移除数组中的假值`
      • `8.# 确认一个数字是奇数还是偶数`
      • `9.# 获取两个数字之间的随机数`
      • `10.# 计算平均值`
      • `11.# 将数字截断到固定的小数点`
      • `12.# 计算两个日期之间天数`
      • `13.# 从日期中获取是一年中的哪一天`
      • `14.# 获取一个随机的颜色值`
      • `15.# 将RGB颜色转换为十六进制颜色值`
      • `16.# 清除所有的cookie`
      • `17.# 检测黑暗模式`
      • `18.# 交换两个变量的值`
      • `19.# 暂停一会`
      • `20.#翻转字符串`
      • `21.#生成一个随机的十六进制码`
      • `22.#数组随机排序`
      • `23.#滚动到顶部/滚动到底部`
      • `24.#检查是否有人在使用暗色主题`
      • `25.#复制到剪贴板`
      • `26.#获取两个日期之间的天数`
      • `27.#获取随机布尔值`
      • `28.#检查当前用户是否在苹果设备上`
      • `29.#从数组中删除重复项`
      • `30.#检查对象是否为空`
      • `31.#检查当前选项卡是否在后台`
      • `32.#检测元素是否处于焦点`
      • `33.#检查设备类型`
      • `34.#获取选定的文本`
      • `35.#查询某天是否为工作日`
      • `36.#转换华氏/摄氏`
      • `37.#两日期之间相差的天数`
      • `38.#将 RGB 转换为十六进制`
      • `39.#计算数组平均值`
      • `40.#检查元素是否在视窗中`
      • `41.#持续更新...`

1.#生成随机字符串

当我们需要一个唯一id时,通过Math.random创建一个随机字符串简直不要太方便噢!!!

const randomString = () => Math.random().toString(36).slice(2)
randomString() // gi1qtdego0b
randomString() // f3qixv40mot
randomString() // eeelv1pm3ja
const max = 20;
const min = 10;

// Math.floor() 返回小于或等于一个给定数字的最大整数。
// Math.random() 返回一个浮点型伪随机数字,在0(包括0)和1(不包括)之间。

const random = Math.floor(Math.random() * (max - min + 1)) + min;
console.log(random);

//output: 17
//output: 10

2.# 转义HTML特殊字符

解决XSS方法之一就是转义HTML。

const escape = (str) => str.replace(/[&<>"']/g, (m) => ({  '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[m]))
escape('<div class="medium">Hi Medium.</div>') 
// &lt;div class=&quot;medium&quot;&gt;Hi Medium.&lt;/div&gt

3.# 单词首字母大写

const uppercaseWords = (str) => str.replace(/^(.)|\s+(.)/g, (c) => c.toUpperCase())
uppercaseWords('hello world'); // 'Hello World'

4.# 将字符串转换为小驼峰

const toCamelCase = (str) => str.trim().replace(/[-_\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));
toCamelCase('background-color'); // backgroundColor
toCamelCase('-webkit-scrollbar-thumb'); // WebkitScrollbarThumb
toCamelCase('_hello_world'); // HelloWorld
toCamelCase('hello_world'); // helloWorld

5.# 删除数组中的重复值

得益于ES6,使用Set数据类型来对数组去重太方便了。

const removeDuplicates = (arr) => [...new Set(arr)]
console.log(removeDuplicates([1, 2, 2, 3, 3, 4, 4, 5, 5, 6])) 
// [1, 2, 3, 4, 5, 6]

6.# 铺平一个数组

const flat = (arr) =>
    [].concat.apply(
        [],
        arr.map((a) => (Array.isArray(a) ? flat(a) : a))
    )
// Or
const flat = (arr) => arr.reduce((a, b) => (Array.isArray(b) ? [...a, ...flat(b)] : [...a, b]), [])
flat(['cat', ['lion', 'tiger']]) // ['cat', 'lion', 'tiger']

7.# 移除数组中的假值

const removeFalsy = (arr) => arr.filter(Boolean)
removeFalsy([0, 'a string', '', NaN, true, 5, undefined, 'another string', false])
// ['a string', true, 5, 'another string']

8.# 确认一个数字是奇数还是偶数

const isEven = num => num % 2 === 0
isEven(2) // true
isEven(1) // false

9.# 获取两个数字之间的随机数

const random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min)
random(1, 50) // 25
random(1, 50) // 34

10.# 计算平均值

const average = (...args) => args.reduce((a, b) => a + b) / args.length;
average(1, 2, 3, 4, 5);   // 3

11.# 将数字截断到固定的小数点

const round = (n, d) => Number(Math.round(n + "e" + d) + "e-" + d)
round(1.005, 2) //1.01
round(1.555, 2) //1.56

12.# 计算两个日期之间天数

const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24));
diffDays(new Date("2021-11-3"), new Date("2022-2-1"))  // 90

13.# 从日期中获取是一年中的哪一天

const dayOfYear = (date) => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24))
dayOfYear(new Date()) // 74

14.# 获取一个随机的颜色值

const randomColor = () => `#${Math.random().toString(16).slice(2, 8).padEnd(6, '0')}`
randomColor() // #9dae4f
randomColor() // #6ef10e

15.# 将RGB颜色转换为十六进制颜色值

const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)
rgbToHex(255, 255, 255)  // '#ffffff

16.# 清除所有的cookie

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

17.# 检测黑暗模式

const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches

18.# 交换两个变量的值

[foo, bar] = [bar, foo]

19.# 暂停一会

const pause = (millis) => new Promise(resolve => setTimeout(resolve, millis))
const fn = async () => {
  await pause(1000)
  console.log('fatfish') // 1s later
}
fn()

20.#翻转字符串

const reverse = (str) => str.split('').reverse().join('');
const str = 'hello world';

console.log(reverse(str));

// output: dlrow olleh
const reverse = str => str.split('').reverse().join('');
reverse('this is reverse');
// esrever si siht

21.#生成一个随机的十六进制码

padEnd() 方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。

const color =
   '#' +
   Math.floor(Math.random() * 0xffffff)
      .toString(16)
      .padEnd(6, '0');

console.log(color);

//output: #ed19ed
const randomHexColor = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}`
console.log(randomHexColor());
// #a2ce5b

22.#数组随机排序

const shuffleArray = (arr) => arr.sort(() => 0.5 - Math.random());

const arr = Array.from({ length: 10 }, (_, i) => i + 1);
console.log('array: ', arr);
console.log('shuffled array: ', shuffleArray(arr));

//output:
// array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// shuffled array: [5, 7, 8, 9, 1, 2, 3, 4, 10, 6]

23.#滚动到顶部/滚动到底部

初学者经常会发现自己很难正确地将元素滚动到视图中。滚动元素最简单的方法是使用 scrollIntoView() 方法。

/Add behavior: "smooth" for a smooth scrolling animation.
const scrollToTop = (element) =>
   element.scrollIntoView({ behavior: 'smooth', block: 'start' });

const scrollToBottom = (element) =>
   element.scrollIntoView({ behavior: 'smooth', block: 'end' });

24.#检查是否有人在使用暗色主题

如果您希望您显示的内容遵循使用您网站的人的配色方案,JavaScript 包含一种检测某人是否使用暗色主题的方法,以便您可以相应地调整颜色。

const isDarkMode1 =
   window.matchMedia &&
   window.matchMedia('(prefers-color-scheme: dark)').matches;

// 如果您想将其用作函数
const isDarkMode2 = () =>
   window.matchMedia &&
   window.matchMedia('(prefers-color-scheme: dark)').matches;

console.log(isDarkMode1);
console.log(isDarkMode2());

//output:
// true
// true

25.#复制到剪贴板

将文本复制到剪贴板非常有用,也是一个难以解决的问题。您可以在网上找到各种解决方案,但下面的解决方案可能是最简洁和最聪明的解决方案之一。

const copyToClipboard = (text) =>
   navigator.clipboard?.writeText && navigator.clipboard.writeText(text);

26.#获取两个日期之间的天数

确定如用户的年龄时,你必须计算从某个时间点到现在已经过去的天数。

const ageDays = (old, recent) =>
   Math.ceil(Math.abs(old - recent) / (1000 * 60 * 60 * 24)) + ' Day(s)';

const firstDate = new Date('2021-06-10');
const secondDate = new Date('2022-03-03');

console.log(ageDays(firstDate, secondDate));

// output: 266 Day(s)

27.#获取随机布尔值

Javascript 中的 Math.random 函数可用于生成范围之间的随机数。要生成随机布尔值,我们需要随机获取 0 到 1 之间的数字,然后检查它是大于还是小于 0.5。

const randomBoolean = () => Math.random() >= 0.5;
console.log(randomBoolean());

// output: false

28.#检查当前用户是否在苹果设备上

我们可以使用 navigator.platform 来检查浏览器运行的平台

const isAppleDevice = /Mac|iPod|iPhone|iPad/.test(navigator.platform);

console.log(navigator.platform);
console.log(isAppleDevice);

// output:
// Win32
// false

注意:此属性的推荐替代方案是 navigator.userAgentData.platform。但是,navigator.userAgentData.platform 还没有被一些主流浏览器支持,并且定义它的规范还没有被任何标准组采用(具体来说,它不是 W3C 或 WHATWG 发布的任何规范的一部分)。

29.#从数组中删除重复项

let arr = [5, 7, 5, 7, 4];
let unique = […new Set(arr)];
console.log(unique); //returns [5, 7, 4]
const uniqueArr = (arr) => [...new Set(arr)];
console.log(uniqueArr(["前端","js","html","js","css","html"]));

30.#检查对象是否为空

const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;
isEmpty({}) // true
isEmpty({a:"not empty"}) //false

31.#检查当前选项卡是否在后台

浏览器使用选项卡式浏览,任何网页都有可能在后台,此时对用户来说是没有在浏览的, 知道怎么快速检测到,你的网页对用户是隐藏还是可见吗?

const isTabActive = () => !document.hidden; 

isTabActive()
// true|false

32.#检测元素是否处于焦点

activeElement 属性返回文档中当前获得焦点的元素。

const elementIsInFocus = (el) => (el === document.activeElement);
elementIsInFocus(anyElement)
// 元素处于焦点返回true,反之返回false

33.#检查设备类型

使用navigator.userAgent 判断是移动设备还是电脑设备:

const judgeDeviceType =
      () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|OperaMini/i.test(navigator.userAgent) ? 'Mobile' : 'PC';

judgeDeviceType()  // PC | Mobile

34.#获取选定的文本

使用内置的 getSelection 获取用户选择的文本:

const getSelectedText = () => window.getSelection().toString();

getSelectedText();
// 返回选中的内容

35.#查询某天是否为工作日

我们自己写日历组件时经常会用到,判断某个日期是否为工作日;周一至周五为工作日:

const isWeekday = (date) => date.getDay() % 6 !== 0;

isWeekday(new Date(2022, 03, 11))
// true

36.#转换华氏/摄氏

处理温度有时会晕头转向。这两个函数则能帮助大家将华氏温度转换为摄氏温度,以及将摄氏温度转换为华氏温度。

//将华氏温度转换为摄氏温度
const fahrenheitToCelsius = (fahrenheit) => (fahrenheit - 32) * 5/9;
fahrenheitToCelsius(50);
// 10

//将摄氏温度转华氏温度
const celsiusToFahrenheit = (celsius) => celsius * 9/5 + 32;
celsiusToFahrenheit(100)
// 212

37.#两日期之间相差的天数

日常开发中经常遇到需要显示剩余天数, 一般我们就需要计算两日期之间相差天数:

const dayDiff = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000);

dayDiff(new Date("2021-10-21"), new Date("2022-02-12"))
// Result: 114

38.#将 RGB 转换为十六进制

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

rgbToHex(255, 255, 255); 
//  #ffffff

39.#计算数组平均值

计算平均值的方式很多,计算的逻辑都是一样的, 但是实现方式各不相同,一行代码简单实现:

const average = (arr) => arr.reduce((a, b) => a + b) / arr.length;
average([1,9,18,36]) //16

40.#检查元素是否在视窗中

const elementInViewport = el => el.getBoundingClientRect().top >= 0 && el.getBoundingClientRect().bottom <= window.innerHeight;

该函数接受一个参数 el,表示要检查的元素。在函数内部,使用 getBoundingClientRect() 方法获取到 el 元素的位置信息,然后通过比较 top 和 bottom 属性来判断元素是否在当前视口中可见。

具体来说,el.getBoundingClientRect().top >= 0 表示元素顶部是否在或者超出视口顶部,而 el.getBoundingClientRect().bottom <= window.innerHeight 表示元素底部是否在或者超出视口底部。

如果上述两个条件都满足,则说明元素完全在当前视口中可见,函数将返回 true,否则将返回 false。

以下是使用 elementInViewport 函数检查元素是否在视口中可见的示例:

const element = document.getElementById('myElement');
if (elementInViewport(element)) {
  console.log('Element is in the viewport');
} else {
  console.log('Element is not in the viewport');
}

41.#持续更新...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/222030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第74讲:MySQL数据库InnoDB存储引擎事务:Redo Log与Undo Logo的核心概念

文章目录 1.InnoDB引擎中的逻辑存储结构2.事务的基本概念3.Redo log的核心概念3.1.什么是Redo log3.2.如果没有redo log面临的问题3.3.使用redo log之后是怎样的流程 4.Undo log的核心概念 1.InnoDB引擎中的逻辑存储结构 InnoDB存储引擎的逻辑结构分为以下几层&#xff1a; Ta…

Distilling Knowledge via Knowledge Review 中文版

Distilling Knowledge via Knowledge Review&#xff1a; 通过知识回顾提炼知识 摘要 知识蒸馏将知识从教师网络传输到学生网络&#xff0c;旨在极大提高学生网络的性能。先前的方法大多集中在提出特征转换和损失函数&#xff0c;用于同一级别特征之间的改进效果。我们不同地…

第二十一章 网络通信

21.1 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。 局域网与互联网 服务器是指提供信息的计算机或程序&#xff0c;客户机是指请求信息的计算机或程序。网络用于连接服务器与客户机&#xff0c;实现两者间的相互通信。 网络协议 网络协议规定了计算…

集成开发环境PyCharm的使用【侯小啾python基础领航计划 系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python基础领航计划 系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

企业如何结合数字化技术实现精益生产

企业要想长远良性发展&#xff0c;就必须不断追求生产效率的极致&#xff0c;才能不断对抗各方各面带来的压力。结合国家大环境趋势&#xff0c;绿色生产已然成为了国家关注的重点&#xff0c;所以老旧耗能的企业生产模式注定会被时代所淘汰。企业只有紧跟国家的发展步伐&#…

QScrollArea的使用

参考&#xff1a; QT的自动滚动区QScrollArea的用法&#xff0c;图文详解-CSDN博客 demo: QScrollArea *scrollArea new QScrollArea;QWidget *pWgt new QWidget();QHBoxLayout *pLayout new QHBoxLayout();for(int i 0; i < 100; i){QPushButton *pBtn new QPushB…

【hacker送书第9期】算法训练营(入门篇)

第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式&#xff0c;详细讲解常用的数据结构与算法&#xff0c;又融入大量的竞赛实例和解题技巧。通过对本书的学习&#xff0c;读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…

java基础之循环

Java中有三种主要的循环结构&#xff1a; while 循环do…while 循环for 循环 1、while循环 1.1、结构 while( 布尔表达式 ) { //循环内容 } 1.2、实例 public class TestWhile {public static void main(String[] args) {int x 1;while (x<10){System.out.println("…

面试官:说说webpack的构建流程?

面试官&#xff1a;说说webpack的构建流程? 一、运行流程 webpack 的运行流程是一个串行的过程&#xff0c;它的工作流程就是将各个插件串联起来 在运行过程中会广播事件&#xff0c;插件只需要监听它所关心的事件&#xff0c;就能加入到这条webpack机制中&#xff0c;去改变…

万兆单模光模块SFP-XG-LX:高速长距离数据传输利器

随着企业和个人对高速数据传输的需求不断增加&#xff0c;网络设备需要不断更新换代&#xff0c;以满足更高速、更远距离的传输要求。万兆单模光模块SFP-XG-LX作为一种基于光纤传输的高速网络模块&#xff0c;适用于长距离的数据传输。本文将介绍万兆单模光模块SFP-XG-LX的特点…

CSS单位vmin、vmax

在前端项目中使用到图片或者一些其他的需要适应视口宽度的地方时候&#xff0c;我们可以使用vmin或者vmax这两个属性。我们来看一下这两个属性在MDN上面的定义 实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

婴儿专用洗衣机有必要吗?宝宝洗衣机洗衣服

相信各位宝爸宝妈都有同样的苦恼&#xff0c;那就是宝宝的衣服该怎么来洗宝宝每天都有一大堆衣物和各种巾要洗&#xff0c;如果单纯用手洗&#xff0c;真的是一个很大的工程&#xff0c;将宝宝的衣服丢进去家庭用的洗衣机&#xff0c;宝宝稚嫩的皮肤又怕会被细jun感染到&#x…

04_W5500_TCP_Server

上一节我们完成了TCP_Client实验&#xff0c;这节使用W5500作为服务端与TCP客户端进行通信。 目录 1.W5500服务端要做的&#xff1a; 2.代码分析&#xff1a; 3.测试&#xff1a; 1.W5500服务端要做的&#xff1a; 服务端只需要打开socket&#xff0c;然后监听端口即可。 2…

uniapp中解决swiper高度自适应内容高度

起因&#xff1a;uniapp中swiper组件swiper 标签存在默认高度是 height: 150px &#xff1b;高度无法实现由内容撑开&#xff0c;在默认情况下&#xff0c;swiper盒子高度显示总是 150px 解决办法思路&#xff1a; 动态设置swiper盒子的高度&#xff0c;故需要获取swiper-item盒…

您距离一个成熟安全的 DevOps 平台,只差一个迁移

目录 功能丰富&#xff0c;开箱即用 安全保障&#xff0c;质效并行 私有部署&#xff0c;自主可控 月度发版&#xff0c;持续迭代 本土化团队&#xff0c;企业级支持 迁移指南 从 Gitee 迁移到极狐GitLab 从 SVN 迁移到极狐GitLab 从 GitHub 迁移到极狐GitLab 历经 14…

2024最新电脑系统清理软件哪个好用?

基本上&#xff0c;不管是win版还是Mac版的电脑&#xff0c;其装机必备就是一款电脑系统清理软件&#xff0c;就比如Mac&#xff0c;目前在市面上&#xff0c;电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说&#xff0c;使用一些小众工具&#xff0c;往往很多用户都不…

家用超声波清洗机哪个牌子好?一起来看、值得推荐超声波清洗机

家用超声波清洗机可以干嘛呢&#xff1f;最常见的就是来清洗眼镜。眼镜党朋友应该经常接触超声波清洗机&#xff0c;它常出现在眼镜店中&#xff0c;眼镜店老板帮顾客清洗眼镜&#xff1b;也会出现在工业领域、医疗领域等&#xff0c;超声波清洗机使用范围还是挺广的&#xff0…

【SpringCloud】通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题

文章目录 前言1.第一次尝试1.1服务被调用方更新1.2压测第一次尝试1.3 问题分析1.4 同步的不是最新列表 2.第二次尝试2.1调用方过滤下线服务2.2压测第二次尝试2.3优化 写到最后 前言 在上文的基础上&#xff0c;通过压测的结果可以看出&#xff0c;使用DiscoveryManager下线服务…

基于c++版本链栈改-Python思维总结

##栈部分-&#xff08;叠猫猫&#xff09; ##抽象数据类型栈的定义&#xff1a;是一种遵循先入后出的逻辑的线性数据结构。 ##栈的链式表示 使用链表实现栈时&#xff0c;我们可以将链表的头结点视为栈顶&#xff0c;尾结点视为栈底。 在进行插入元素的时候我们只需要把结点…

逆水行舟!浅谈24届双非本科秋招

逆水行舟&#xff01;浅谈24届双非本科的秋招 逆水行舟&#xff01;浅谈24届双非本科的秋招0、背景 -- 写下本文的初衷1、实习 -- 秋招的预备战役1.1 科大讯飞1.2 三七互娱 2、秋招 -- 一场没有硝烟的战争3、总结 -- 做好自己想做的事情 0、背景 – 写下本文的初衷 如题&#…