/use-js-in-one-line

一行 js 代码能实现的功能

The UnlicenseUnlicense

又名《如何在不牺牲可读性的情况下用一行 javascript 代码实现项目实际开发中所用到的功能》

注意: 不考虑浏览器向下兼容性,不考虑运行效率,不考虑异常,请勿随意用于生产环境。

获取 URL 的 GET 参数(仅浏览器可用)

let getUrlParams = () => Object.fromEntries(new URLSearchParams(location.search).entries())

数组去重(仅限基础数据类型)

let dedup = (arr) => Array.from(new Set(arr))

使用

let arr = [1, 1, 2, 2, 3, 3]
let output = dedup(arr) // output: [1, 2, 3]

数组长度翻 n 倍(相对位置不变)

let repeat = (arr, n) => arr.flatMap(item => new Array(n).fill(item))

使用

let arr = [1, 2, 3]
let output = repeat(arr, 2) // output: [1, 1, 2, 2, 3, 3]

数组长度翻 n 倍(整体翻倍)

let repeat = (arr, n) => new Array(n).fill(arr).flatMap(item => item)

使用

let arr = [1, 2, 3]
let output = repeat(arr, 2) // output: [1, 2, 3, 1, 2, 3]

深拷贝(慢,但是普适)

let deepClone = (v) => JSON.parse(JSON.stringify(v))

使用

let obj = { a: 0 }
let obj_copy = deepClone(obj)
obj.a = 1
console.log(obj) // { a: 1 }
console.log(obj_copy) // { a: 0 }

获取类型

let getType = (v) => Object.prototype.toString.call(v).slice(8, -1)

使用

getType(null) // Null
getType(undefined) // Undefined
getType(true) // Boolean
getType(0) // Number
getType(0n) // BigInt
getType('') // String
getType(Symbol()) // Symbol
getType({}) // Object
getType([]) // Array
getType(() => []) // Function
getType(new Set()) // Set
getType(new Map()) // Map
getType(new FormData()) // FormData

获取指定区间内的随机整数

let random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);

使用

random(0, 100)

反转字符串

let reverse = str => str.split('').reverse().join('');

使用

reverse('javascript') // tpircsavaj

数组求和

let sum = arr => arr.reduce((a, b) => a + b)

使用

let arr = [1, 2, 3]
sum(arr) // 6

数组求平均值

let avg = arr => arr.reduce((a, b) => a + b) / arr.length

使用

let arr = [1, 2, 3]
avg(arr) // 2

计算阶乘(递归)

let fact = n => n > 0 ? n * fact(n - 1) : 1

使用

fact(5) // 120

生成 [min, max] 区间的连续整数序列

let func = (start, end) => start < end ? [start, ...func(start + 1, end)] : [end]

使用

func(1, 5) // [1, 2, 3, 4, 5]

任意数量的数组合并

let merge = (...args) => args.flatMap(arg => arg)

使用

merge([1], [2], [3]) // [1, 2, 3]

剔除数组中因为多了个逗号产生的 undefined (组合使用模板时容易碰到,与编码规范有关)

let clean = (arr) => arr.filter(item => item !== undefined)

使用

let arr = [
  {
    a: 1
    // ...
  },
  /*
    一大堆说明
    ...
  */
  ,{
    b: 2,
    // ...
  }
]// [{ a: 1 }, 空, { b: 2 }]
clean(arr) // [{ a: 1 }, { b: 2 }]

低可读性

生成连续的正整数序列

let func = n => new Array(n).fill().map((item, idx) => idx + 1)

使用

func(5) // [1, 2, 3, 4, 5]

计算阶乘

let fact = n => new Array(n).fill().map((item, idx) => idx + 1).reduce((a, b) => a * b)

使用

fact(5) // 120

生成 A - Z

let getAToZ = () => new Array(26).fill().map((_, i) => String.fromCharCode(65 + i))

使用

getAToZ().join('') // ABCDEFGHIJKLMNOPQRSTUVWXYZ

生成 a - z

let getAToZ = () => new Array(26).fill().map((_, i) => String.fromCharCode(97 + i))

使用

getAToZ().join('') // abcdefghijklmnopqrstuvwxyz

生成 0 - 9

let getZeroToNine = new Array(10).fill().map((_, i) => String.fromCharCode(48 + i))

使用

getZeroToNine().join('') // 0123456789

拓展阅读