工作中造轮子的小积累-必备小知识

192 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

JavaScript 中的工具函数

在实际工作中, 我们因为业务需求不同, 不得不经常找轮子, 这样既浪费时间, 而且有时候又找不到合适的轮子. 而我们自己也会有经常造轮子, 不过由于工作忙的原因, 没有总结出来, 就造成了经常找轮子造轮子的循环往复..

这里总结分享一些在工作中造轮子的小积累:

  1. 获取 JS 数据类型
/**
 * 获取 JS 基本数据类型, 返回小写字母开头
 * @param data
 * @returns {string} Function | Array | String | Number | Undefined | Null...
 */
const getType = (data: any) => {
  const type = Object.prototype.toString.call(data).split(' ')[1]
  return type.substring(0, type.length - 1).toLowerCase()
}

2. 几个常用的正则表达式

const regexp = {
  number: /^[0-9]*$/,
  text: /^[0-9a-zA-Z\u4e00-\u9fa5\s]*$/,
  mailSuffix: /@[0-9a-z]+\.[0-9a-z]+$/,
  email: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/,
  chinaMobilePhone:
    /^(\+)?(0|86|17951)?(13[0-9]||14[57]||15[012356789]||16[6]||17[678]||18[0-9]||19[89])[0-9]{8}$/,
}

3. 数组排序

one-line, unreadable quick sort implementation

const qs = (l) =>
  l.length > 0
    ? (([p, ...t]) => [...qs(t.filter((x) => x < p)), p, ...qs(t.filter((x) => x >= p))])(l)
    : []

function arraySort(array) {
  let arr = [...array],
    res = []
  while (arr.length) {
    let index = (Math.random() * arr.length) >> 0
    res[arr.length - 1] = arr[index]
    arr.splice(index, 1)
  }
  return res
}

4. 随机更改数组元素顺序,混淆数组

    // 建议数组混淆
    function shuffle(arr) {
      const newArr = [...arr]
      for (let i = 0; i < newArr.length; i += 1) {
        const random = Math.floor(Math.random() * (i + 1))
        ;[newArr[i], newArr[random]] = [newArr[random], newArr[i]]
      }
      return newArr
    }
    const randomSortArr = (arr) => arr.slice().sort(() => Math.random() - 0.5)
    console.log(randomSortArr(arr))
    /*
    let a = (arr) => arr.slice().sort(() => Math.random() - 0.5);
    let b = a([1,2,3,4,5]);
    console.log(b);