开发中常用的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多种数据类型表格排序代码分析
Sep 11 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
原生javascript实现拖动元素示例代码
Sep 01 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
微信小程序实现红包功能(后端PHP实现逻辑)
Jul 11 Javascript
JavaScript函数的4种调用方法实例分析
Mar 05 Javascript
js字符串处理之绝妙的代码
Apr 05 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
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
多个应用共存的Django配置方法
2018/05/30 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
学生自我评语大全
2014/04/18 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
党员个人公开承诺书
2014/08/29 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
考研经验交流会策划书
2015/11/02 职场文书
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python