直接拿来用!盘点一些拯救头发的 JS 单行代码,网友:摸鱼必备啊

开发 前端
JavaScript是 Web的编程语言。所有现代的 HTML页面都使用 JavaScript。 JavaScript非常容易学。本篇就盘点一些拯救头发的 JS 单行代码。

[[429520]]

废话不多说,直接上。

DOM

检查一个元素是否被聚焦

  1. const hasFocus = (ele) => ele === document.activeElement 

获取一个元素的所有兄弟元素

  1. const siblings = (ele) =>  
  2.   .slice.call(ele.parentNode.children).filter((child) => child !== ele); 

获取选中文本

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

回到上一页

  1. history.back(); 
  2. // Or 
  3. history.go(-1); 

清除所有 cookies

  1. const cookies = document.cookie.split(';').map((item) =>  
  2. item.split('=')).reduce((acc, [k, v]) => (acc[k.trim().replace('"''')] = v) && acc, {}); 

将 cookie 转换为对象

  1. const cookies = document.cookie.split(';').map((item) => item.split('=')).reduce((acc, [k, v]) => (acc[k.trim().replace('"''')] = v) && acc, {}); 

数组

比较两个数组

  1. // `a` 和 `b` 都是数组 
  2. const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b); 
  3.  
  4. // 或者 
  5. const isEqual = (a, b) => a.length === b.length &&  
  6.   a.every((v, i) => v === b[i]); 
  7.  
  8. // 事例 
  9. isEqual([1, 2, 3], [1, 2, 3]); // true 
  10. isEqual([1, 2, 3], [1, '2', 3]); // false 

将对象数组转换为单个对象

  1. const toObject = (arr, key) => arr.reduce((a, b) => ({ ...a, [b[key]]: b }), {}); 
  2. // Or 
  3. const toObject = (arr, key) => Object.fromEntries(arr.map((it) => [it[key], it])); 
  4.  
  5. // 事例 
  6. toObject([ 
  7. { id: '1'name'Alpha', gender: 'Male' }, 
  8. { id: '2'name'Bravo', gender: 'Male' }, 
  9. { id: '3'name'Charlie', gender: 'Female' }], 
  10. 'id'); 
  11. /* 
  12. '1': { id: '1'name'Alpha', gender: 'Male' }, 
  13. '2': { id: '2'name'Bravo', gender: 'Male' }, 
  14. '3': { id: '3'name'Charlie', gender: 'Female' } 
  15. */ 

根据对象数组的属性进行计数

  1. const countBy = (arr, prop) => arr.reduce((prev, curr) => ((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev), {}); 
  2.  
  3. // 事例 
  4. countBy([ 
  5. { branch: 'audi', model: 'q8'year'2019' }, 
  6. { branch: 'audi', model: 'rs7'year'2020' }, 
  7. { branch: 'ford', model: 'mustang'year'2019' }, 
  8. { branch: 'ford', model: 'explorer'year'2020' }, 
  9. { branch: 'bmw', model: 'x7'year'2020' }, 
  10. ], 
  11. 'branch'); 
  12.  
  13. // { 'audi': 2, 'ford': 2, 'bmw': 1 } 

检查数组是否为空

  1. const isNotEmpty = (arr) => Array.isArray(arr) && Object.keys(arr).length > 0; 
  2.  
  3. // 事例 
  4. isNotEmpty([]); // false 
  5. isNotEmpty([1, 2, 3]); // true 

对象

检查多个对象是否相等

  1. const isEqual = (...objects) => objects.every((obj) => 
  2.   JSON.stringify(obj) === JSON.stringify(objects[0])); 
  3. // 事例 
  4.  
  5. console.log(isEqual({ foo: 'bar' }, { foo: 'bar' })); // true 
  6. console.log(isEqual({ foo: 'bar' }, { bar: 'foo' })); // false 

从对象数组中提取指定属性的值

  1. const pluck = (objs, property) => objs.map((obj) => obj[property]); 
  2. // Example 
  3. const aa = pluck([ 
  4. name'小智', age: 20 }, 
  5. name'大志', age: 25 }, 
  6. name'王大志', age: 30 }, 
  7. ], 
  8. 'name'); 
  9. // [ '小智''大志''王大志' ] 

反转对象的键和值

  1. const invert = (obj) => Object.keys(obj).reduce((res, k) => Object.assign(res, { [obj[k]]: k }), {}); 
  2. // 或 
  3. const invert = (obj) => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k])); 
  4. // 事例 
  5. invert({ a: '1', b: '2', c: '3' }); // { 1: 'a', 2: 'b', 3: 'c' } 

从对象中删除所有 null 和 undefined 的属性

  1. const removeNullUndefined = (obj) =>  
  2.   Object.entries(obj) 
  3.    .reduce((a, [k, v]) => (v == null ? a : ((a[k] = v), a)), {}); 
  4.  
  5. // 或 
  6.  
  7. const removeNullUndefined = (obj) => 
  8.   Object.entries(obj) 
  9.   .filter(([_, v]) => v != null
  10.   .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}); 
  11.  
  12. // 或 
  13.  
  14. const removeNullUndefined = (obj) =>  
  15.     Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)); 
  16.  
  17. // 例子 
  18. removeNullUndefined({ 
  19.   foo: null
  20.   bar: undefined, 
  21.   fuzz: 42} 
  22. );  
  23. // { fuzz: 42 } 

根据对象的属性对其进行排序

  1. Object.keys(obj) 
  2.   .sort() 
  3.   .reduce((p, c) => ((p[c] = obj[c]), p), {}); 
  4.  
  5. // 事例 
  6. const colors = { 
  7.   white: '#ffffff'
  8.   black: '#000000'
  9.   red: '#ff0000'
  10.   green: '#008000'
  11.   blue: '#0000ff'
  12. }; 
  13.  
  14. sort(colors); 
  15.  
  16. /* 
  17.   black: '#000000'
  18.   blue: '#0000ff'
  19.   green: '#008000'
  20.   red: '#ff0000'
  21.   white: '#ffffff'
  22. */ 

检查一个对象是否是Promise

  1. const isPromise = (obj) => 
  2. !!obj && (typeof obj === 'object' || typeof obj === 'function') &&  
  3. typeof obj.then === 'function'

检查一个对象是否是一个数组

  1. const isArray = (obj) => Array.isArray(obj); 

字符串

检查路径是否是相对路径

  1. const isRelative = (path) => !/^([a-z]+:)?[\\/]/i.test(path); 
  2.  
  3. // 例子 
  4. isRelative('/foo/bar/baz'); // false 
  5. isRelative('C:\\foo\\bar\\baz'); // false 
  6. isRelative('foo/bar/baz.txt'); // true 
  7. isRelative('foo.md'); // true 

将字符串的第一个字符改为小写

  1. const lowercaseFirst = (str) => `${str.charAt(0).toLowerCase()}${str.slice(1)}`; 
  2.  
  3. // 例子 
  4. lowercaseFirst('Hello World'); // 'hello World' 

重复一个字符串

  1. const repeat = (str, numberOfTimes) => str.repeat(numberOfTimes); 
  2.  
  3. // 例子 
  4. repeat('ab', 3) 
  5. // ababab 

Dates

给一个小时添加“am/pm”后缀

  1. // `h` is an hour number between 0 and 23 
  2. const suffixAmPm = (h) => `${h % 12 === 0 ? 12 : h % 12}${h < 12 ? 'am' : 'pm'}`; 
  3.  
  4. // 例子 
  5. suffixAmPm(0); // '12am' 
  6. suffixAmPm(5); // '5am' 
  7. suffixAmPm(12); // '12pm' 
  8. suffixAmPm(15); // '3pm' 
  9. suffixAmPm(23); // '11pm' 

计算两个日期之间的不同天数

  1. const diffDays = (date, otherDate) => Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24)); 
  2.  
  3. // 例子 
  4. diffDays(new Date('2014-12-19'), new Date('2020-01-01')); // 1839 

检查日期是否有效

  1. const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf()); 
  2.  
  3. isDateValid("December 17, 1995 03:24:00"); // true 

其它

检查代码是否在Node.js中运行

  1. const isNode = typeof process !== 'undefined' && process.versions != null &&  
  2.   process.versions.node != null

检查代码是否在浏览器中运行

  1. const isBrowser = typeof window === 'object' && typeof document === 'object'

将URL参数转换为对象

  1. 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 }),{}); 
  2.  
  3. // 例子 
  4. getUrlParams(location.search); // Get the parameters of the current URL 
  5. getUrlParams('foo=Foo&bar=Bar'); // { foo: "Foo", bar: "Bar" } 
  6.  
  7. // Duplicate key 
  8. getUrlParams('foo=Foo&foo=Fuzz&bar=Bar'); // { foo: ["Foo""Fuzz"], bar: "Bar" } 

黑暗检测模式

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

拷贝到剪切板

  1. const copyToClipboard = (text) =>  
  2.   navigator.clipboard.writeText(text); 
  3.  
  4. // 例子 
  5. copyToClipboard("Hello World"); 

将RGB转换为十六进制

  1. const rgbToHex = (r, g, b) => 
  2.    "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); 
  3.  
  4. // 例子 
  5. rgbToHex(0, 51, 255); // #0033ff 

生成一个随机的十六进制颜色

  1. const randomColor = () => `#${Math.random().toString(16).slice(2, 8).padEnd(6, '0')}`; 
  2.  
  3. // 或者 
  4.  
  5. const randomColor = () => `#${(~~(Math.random() * (1 << 24))).toString(16)}`; 

生成随机IP地址

  1. const randomIp = () => Array(4).fill(0) 
  2. .map((_, i) => Math.floor(Math.random() * 255) + (i === 0 ? 1 : 0)) 
  3. .join('.'); 
  4.  
  5. // 例子 
  6. randomIp(); // 175.89.174.131 

使用 Node crypto 模块生成随机字符串

  1. const randomStr = () => require('crypto').randomBytes(32).toString('hex'); 

~~完,我是刷碗智,准备去打个点滴,我们下期见!

作者:Ahmad 译者:前端小智 来源:ishadee

原文:https://javascript.plainenglish.io/17-life-saving-javascript-one-liners-part1-b0b0b32c9f61 https://javascript.plainenglish.io/another-17-life-saving-javascript-one-liners-8c335bf73d2c

 

责任编辑:姜华 来源: 大迁世界
相关推荐

2013-05-30 10:31:03

Android开发移动开发Android开源项目

2013-10-23 13:23:25

Android UI工具

2021-10-31 07:36:17

前端JavaScript编程

2021-02-22 09:27:34

GitHub开源管理面板

2023-03-09 17:54:04

2022-02-17 13:58:38

Linux技巧文件

2024-03-11 15:08:26

Linux操作系统进程

2020-05-19 08:06:57

代码重构代码开发

2013-12-24 14:50:39

Ember.js框架

2020-09-21 06:58:56

TS 代码建议

2009-11-26 10:32:57

PHP代码优化

2021-04-16 08:11:24

js前端JavaScript

2010-03-25 13:59:52

Python API

2012-12-24 14:51:02

iOS

2011-11-30 12:40:42

2019-08-01 12:56:00

Python代码记录

2019-11-22 10:10:46

IT工具技术

2013-03-29 09:03:59

iOS实用小代码iOS开发

2010-03-16 09:15:20

2009-08-04 16:06:19

ASP.NET代码分离
点赞
收藏

51CTO技术栈公众号