加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

开发中常用的 25 个JavaScript 单行代码

发布时间:2019-06-26 22:08:19 所属栏目:建站 来源:alentan
导读:1.强制布尔值 要将变量强制转换为布尔值而不更改其值: constmyBoolean=!!myVariable; !!null//false !!undefined//false !!false//false !!ture//ture !!//false !!string//true !!0//false !!1//true !!{}//true !![]//true 2.基于某个条件为对象设置属

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

  1. const searchObj = search => JSON.parse(`{"${decodeURIComponent(search.substring(1)).replace(/"/g, '"').replace(/&/g, '","').replace(/=/g, '":"')}"}`); 
  2. // 假如请求url为 
  3. // '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' 
  4. // 那么 window.location.search 就为: 
  5. 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' 
  6. searchObj(search) 

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

开发中常用的 25 个JavaScript 单行代码

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

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

13.获取数组交集

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

14.检测设备类型

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

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

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

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

16 多维数组转一维数组

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

17.过滤对象数组

  1. const reducedFilter = (data, keys, fn) =>data.filter(fn).map(el =>keys.reduce((acc, key) => {acc[key] =el[key];return acc;}, {})); 
  2. const data = [ 
  3.  { 
  4.  id: 1, 
  5.  name: 'john', 
  6.  age: 24 
  7.  }, 
  8.  { 
  9.  id: 2, 
  10.  name: 'mike', 
  11.  age: 50 
  12.  } 
  13. ]; 
  14. let a = reducedFilter(data, ['id', 'name'], item => item.age > 24); // [{ id: 2, name: 'mike'}] 

18.驼峰字字符串格式化

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

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

  1. 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(); 
  2. fromCamelCase('someDatabaseFieldName', ' '); // 'some database field name' 
  3. fromCamelCase('someLabelThatNeedsToBeCamelized', '-'); // 'some-label-that-needs-to-be-camelized' 
  4. fromCamelCase('someJavascriptProperty', '_'); // 'some_javascript_property' 

19.是否为绝对地址

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

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

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

21.数组去重

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

22.数组对象去重

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

23. RGB 颜色转 16进制颜色

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

24. 常用密码组合正则

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

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

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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读