自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

直接拿來(lái)用!盤點(diǎn)一些拯救頭發(fā)的 JS 單行代碼,網(wǎng)友:摸魚必備啊

開(kāi)發(fā) 前端
JavaScript是 Web的編程語(yǔ)言。所有現(xiàn)代的 HTML頁(yè)面都使用 JavaScript。 JavaScript非常容易學(xué)。本篇就盤點(diǎn)一些拯救頭發(fā)的 JS 單行代碼。

[[429520]]

廢話不多說(shuō),直接上。

DOM

檢查一個(gè)元素是否被聚焦

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

獲取一個(gè)元素的所有兄弟元素

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

獲取選中文本

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

回到上一頁(yè)

  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 轉(zhuǎn)換為對(duì)象

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

數(shù)組

比較兩個(gè)數(shù)組

  1. // `a` 和 `b` 都是數(shù)組 
  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 

將對(duì)象數(shù)組轉(zhuǎn)換為單個(gè)對(duì)象

  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. */ 

根據(jù)對(duì)象數(shù)組的屬性進(jìn)行計(jì)數(shù)

  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 } 

檢查數(shù)組是否為空

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

對(duì)象

檢查多個(gè)對(duì)象是否相等

  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 

從對(duì)象數(shù)組中提取指定屬性的值

  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. // [ '小智''大志''王大志' ] 

反轉(zhuǎn)對(duì)象的鍵和值

  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' } 

從對(duì)象中刪除所有 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 } 

根據(jù)對(duì)象的屬性對(duì)其進(jìn)行排序

  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. */ 

檢查一個(gè)對(duì)象是否是Promise

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

檢查一個(gè)對(duì)象是否是一個(gè)數(shù)組

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

字符串

檢查路徑是否是相對(duì)路徑

  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 

將字符串的第一個(gè)字符改為小寫

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

重復(fù)一個(gè)字符串

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

Dates

給一個(gè)小時(shí)添加“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' 

計(jì)算兩個(gè)日期之間的不同天數(shù)

  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中運(yùn)行

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

檢查代碼是否在瀏覽器中運(yùn)行

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

將URL參數(shù)轉(zhuǎn)換為對(duì)象

  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" } 

黑暗檢測(cè)模式

  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轉(zhuǎn)換為十六進(jìn)制

  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 

生成一個(gè)隨機(jī)的十六進(jìn)制顏色

  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)}`; 

生成隨機(jī)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 模塊生成隨機(jī)字符串

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

~~完,我是刷碗智,準(zhǔn)備去打個(gè)點(diǎn)滴,我們下期見(jiàn)!

作者:Ahmad 譯者:前端小智 來(lái)源: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

 

責(zé)任編輯:姜華 來(lái)源: 大遷世界
相關(guān)推薦

2013-05-30 10:31:03

Android開(kāi)發(fā)移動(dòng)開(kāi)發(fā)Android開(kāi)源項(xiàng)目

2013-10-23 13:23:25

Android UI工具

2021-10-31 07:36:17

前端JavaScript編程

2021-02-22 09:27:34

GitHub開(kāi)源管理面板

2023-03-09 17:54:04

2022-02-17 13:58:38

Linux技巧文件

2024-03-11 15:08:26

Linux操作系統(tǒng)進(jìn)程

2020-05-19 08:06:57

代碼重構(gòu)代碼開(kāi)發(fā)

2013-12-24 14:50:39

Ember.js框架

2020-09-21 06:58:56

TS 代碼建議

2009-11-26 10:32:57

PHP代碼優(yōu)化

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工具技術(shù)

2013-03-29 09:03:59

iOS實(shí)用小代碼iOS開(kāi)發(fā)

2010-03-16 09:15:20

2022-06-08 08:03:51

React.jsReactJS 庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)