开发中常用的25个JavaScript单行代码(小结)


Posted in Javascript onJune 28, 2019

1.强制布尔值

要将变量强制转换为布尔值而不更改其值:

const myBoolean = !! myVariable; 
!!null // false 
!!undefined // false 
!!false // false 
!!ture // ture 
!!"" // false 
!!"string" // true 
!!0 // false 
!!1 // true 
!!{} // true 
!![] // true

2.基于某个条件为对象设置属性

要使用spread运算符有条件地在对象上设置属性:

const myObject = {... myProperty && {propName:myPoperty}}; 
let myProperty = 'Jhon' 
const myObject = {...myProperty && {propName: myProperty}}; // {propName: "Jhon"} 
let myProperty = '' 
const myObject = {...myProperty && {propName: myProperty}}; // {}

如果myProperty结果为false,则 && 失败并且不设置新属性; 否则,如果不为空,&& 将设置新属性并覆盖原来的值。

3.合并对象

const mergedObject = { ...objectOne, ...objectTwo }; 
const mergedObject = { ...{name: 'Jhon', age: '18'}, ...{name1: 'jhon1', age1: '12'}}; 
// {name: "Jhon", age: "18", name1: "jhon1", age1: "12"} 
const mergedObject = { ...{name: 'Jhon', age: '18'}, ...{name: 'jhon1', age:'12'}}; 
// {name: "jhon1", age: "12"}

支持无限制合并,但如果对象之间存在相同属性,则后面属性会覆盖前面属性。*请注意,这仅适用于浅层合并。

4.交换变量

要在不使用中间变量的情况下交换两个变量的值:

[varA,varB] = [varB,varA]; 
let a = 1; 
let b = 2; 
[a, b] = [b, a] // a = 2 b = 1 
5.删除Boolean 为 false 值
const clean = dirty.filter(Boolean); 
const clean = [0, false, true, undefined, null, '', 12, 15].filter(Boolean); 
// [true, 12, 15]

这将删除值等于:null,undefined,false,0 和空字符串('')。

6.转换元素类型

要将Number元素转换为String元素:

const stringArray = numberArray.map(String); 
const stringArray = [1, 2, 3].map(String); 
["1", "2", "3"]

如果数组包含字符串,字符串原样保留。 这也可以用于将String元素转换为Number类型:

const numberArray = stringArray.map(Number); 
const stringArray = ["1", "2", "3"].map(String); 
// [1, 2, 3]

7.格式化对象为JSON代码

要以可读的格式显示JSON代码:

const formatted = JSON.stringify(myObj, null, 4); 
const formatted = JSON.stringify({name: 'Jhon', age: 18, address: 'sz'}, null, 4); 
/* 
{ 
 "name": "Jhon", 
 "age": 18, 
 "address": "sz" 
} 
*/

该字符串化命令有三个参数。第一个是Javascript对象。第二个是可选函数,可用于在JSON进行字符串化时对其执行操作。最后一个参数指示要添加多少空格作为缩进以格式化JSON。省略最后一个参数,JSON将返回一个长行。如果myObj中存在循环引用,则会格式失败。

8.快速创建数字数组

要创建一个数组并用数字填充它,索引为零:

const numArray = Array.from(new Array(10), (x, i)=> i); 
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

9.随机生成六位数字验证码

const code = Math.floor(Math.random() * 1000000).toString().padStart(6, "0"); 
// 942377

10.身份证正则

const IDReg= /(^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$)|(^[1-9]d{5}d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{2}[0-9Xx]$)/;

11.window.location.search 转 JS 对象

有时候我们会对url的查询参数即从问号 (?)后 开始的 URL(查询部分)进行转换

const searchObj = search => JSON.parse(`{"${decodeURIComponent(search.substring(1)).replace(/"/g, '\"').replace(/&/g, '","').replace(/=/g, '":"')}"}`); 
// 假如请求url为 
// 'https://www.baidu.com?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=js&rsv_pq=a86b5e5f0007bceb&rsv_t=1e1fAVan%2BVlnkhJHFB0BIGLdLM2slszYMJBTTfFkmyyBUzBpw0ggeuVDE50&rqlang=cn&rsv_enter=0&inputT=1287&rsv_sug3=5&rsv_sug1=3&rsv_sug7=101&rsv_sug2=0&rsv_sug4=1907' 
// 那么 window.location.search 就为: 
let search = '?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=js&rsv_pq=a86b5e5f0007bceb&rsv_t=1e1fAVan%2BVlnkhJHFB0BIGLdLM2slszYMJBTTfFkmyyBUzBpw0ggeuVDE50&rqlang=cn&rsv_enter=0&inputT=1287&rsv_sug3=5&rsv_sug1=3&rsv_sug7=101&rsv_sug2=0&rsv_sug4=1907' 
searchObj(search)

格式化查询字符串得到如下对象:

开发中常用的25个JavaScript单行代码(小结)

12. JS 对象转 url 查询字符串

const objectToQueryString = (obj) => Object.keys(obj).map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&'); 
objectToQueryString({name: 'Jhon', age: 18, address: 'beijing'}) 
// name=Jhon&age=18&address=beijing

13.获取数组交集

const similarity = (arr, values) => arr.filter(v => values.includes(v)); 
similarity([1, 2, 3], [1, 2, 4]); // [1,2]

14.检测设备类型

使用正则表达式来检测 navigator.userAgent 属性判断设备是在移动设备还是在台式机/笔记本电脑打开。

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

15. 将数字转化为千分位格式

const toDecimalMark = num => num.toLocaleString('en-US'); 
toDecimalMark(12305030388.9087); // "12,305,030,388.909"

16 多维数组转一维数组

const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v))); 
deepFlatten([1, [2], [[3], 4], 5]); // [1,2,3,4,5]

17.过滤对象数组

const reducedFilter = (data, keys, fn) =>data.filter(fn).map(el =>keys.reduce((acc, key) => {acc[key] =el[key];return acc;}, {})); 
const data = [ 
 { 
 id: 1, 
 name: 'john', 
 age: 24 
 }, 
 { 
 id: 2, 
 name: 'mike', 
 age: 50 
 } 
]; 
let a = reducedFilter(data, ['id', 'name'], item => item.age > 24); // [{ id: 2, name: 'mike'}]

18.驼峰字字符串格式化

转换驼峰拼写的字符串为特定格式。

使用 String.replace() 去除下划线,连字符和空格,并将驼峰拼写格式的单词转换为全小写。省略第二个参数 separator ,默认使用 _ 分隔符。

const fromCamelCase = (str, separator = '_') =>str.replace(/([a-zd])([A-Z])/g, '$1' + separator + '$2').replace(/([A-Z]+)([A-Z][a-zd]+)/g, '$1' + separator + '$2').toLowerCase(); 
fromCamelCase('someDatabaseFieldName', ' '); // 'some database field name' 
fromCamelCase('someLabelThatNeedsToBeCamelized', '-'); // 'some-label-that-needs-to-be-camelized' 
fromCamelCase('someJavascriptProperty', '_'); // 'some_javascript_property'

19.是否为绝对地址

const isAbsoluteURL = str => /^[a-z][a-z0-9+.-]*:/.test(str); 
isAbsoluteURL('https://google.com'); // true 
isAbsoluteURL('ftp://www.myserver.net'); // true 
isAbsoluteURL('/foo/bar'); // false

20.获取两个日期相差天数

const getDaysDiffBetweenDates = (dateInitial, dateFinal) => (dateFinal - dateInitial) / (1000 * 3600 * 24); 
getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9

21.数组去重

const deDupe = (myArray) => [... new Set(myArray)]; 
deDupe([1, 1, 2, 1, 3, 3, 4]) 
// [1, 2, 3, 4]

22.数组对象去重

const uniqueElementsBy = (arr, fn) =>arr.reduce((acc, v) => {if (!acc.some(x => fn(v, x))) acc.push(v);return acc;}, []); 
uniqueElementsBy([{id: 1, name: 'Jhon'}, {id: 2, name: 'sss'}, {id: 1, name: 'Jhon'}], (a, b) => a.id == b.id) 
// [{id: 1, name: 'Jhon'}, {id: 2, name: 'sss'}]

23. RGB 颜色转 16进制颜色

const RGBToHex = (r, g, b) => ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0'); 
RGBToHex(255, 165, 1); // 'ffa501'

24. 常用密码组合正则

const passwordReg = /(?!^(d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[w~!@#$%^&*?]{8,20}$/; 
// -长度8~20位字符,支持大小写字母、数字、符号三种字符中任意两种字符的组合

25. 判断dom元素是否具有某个className

const hasClass = (el, className) => new RegExp(`(^|\s)${className}(\s|$)`).test(el.className);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript的Function详细
Nov 14 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
微信小程序url传参写变量的方法
Aug 09 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
JavaScript获取时区实现过程解析
Sep 24 Javascript
微信小程序身份证验证方法实现详解
Jun 28 #Javascript
jQuery属性选择器用法实例分析
Jun 28 #jQuery
jQuery位置选择器用法实例分析
Jun 28 #jQuery
jQuery层叠选择器用法实例分析
Jun 28 #jQuery
jQuery内容选择器与表单选择器实例分析
Jun 28 #jQuery
jQuery子选择器与可见性选择器实例分析
Jun 28 #jQuery
JavaScript中callee和caller的区别与用法实例分析
Jun 28 #Javascript
You might like
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP中PDO的错误处理
2011/09/04 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
YII路径的用法总结
2014/07/09 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
vue组件横向树实现代码
2018/08/02 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python基础之函数用法实例详解
2014/09/10 Python
跟老齐学Python之用Python计算
2014/09/12 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
小结Python的反射机制
2020/09/28 Python
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
总经理秘书工作职责
2013/12/26 职场文书
年会活动策划方案
2014/01/23 职场文书
遗产继承公证书
2014/04/09 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
离婚被告代理词
2015/05/23 职场文书
Golang连接并操作MySQL
2022/04/14 MySQL