js常用方法封装

1.常用groupBy分组

static groupBy(ss: any[], fn: string | ((v) => string | number | bigint)) {

    let out = {};

    ss.forEach((s) => {

      let key = typeof fn == 'string' ? s[fn] : fn(s);

      if (!out[key]) {

        out[key] = [];

        out[key].key = key;

      }

      out[key].push(s);

    });

    return Object.keys(out).map((key) => out[key]);

  }

调用例子

groupBy(planSections.items, (section) => section.regionName)

2.生成随机字符串


static getRandom(prefix?) {

    let d = new Date().getTime();

    if (window.performance && typeof window.performance.now === 'function') {

      d += performance.now();

    }

    const _uuid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(

      /[xy]/g,

      function (c) {

        const r = (d + Math.random() * 16) % 16 | 0;

        d = Math.floor(d / 16);

        return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);

      }

    );

    return prefix? `${prefix}${_uuid}`:_uuid;

  }

3.拷贝copy

static copy(data: any, copy: boolean = true): any {

    if (!copy) return data;

    if (data && typeof data === 'object') {

      let type = Object.prototype.toString.call(data);

      if (type === '[object Date]') return new Date(data.getTime());

      let newObj = type === '[object Array]' ? [] : {};

      for (var i in data) {

        newObj[i] = this.copy(data[i], copy);

      }

      return newObj;

    }

    return data;

  }

4.数字转中文

static toChinesNum(num) {

    let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];

    let unit = ["", "十", "百", "千", "万"];

    num = parseInt(num);

    let getWan = (temp) => {

      let strArr = temp.toString().split("").reverse();

      let newNum = "";

      for (var i = 0; i < strArr.length; i++) {

        newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum;

      }

      return newNum;

    }

    let overWan = Math.floor(num / 10000);

    let noWan = `${num % 10000}`;

    if (noWan.toString().length < 4) {

      noWan = "0" + noWan;

    }

    return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num);

  }

5.获取因数

static getFactorArr(num: number) {

    const arr = [];

    if (!num) {

      return arr;

    }

    for (let i = 1; i <= num; i *= 2) {

      if ((i & num) !== 0) {

        arr.push(i);

      }

    }

    return arr;

  }

6.格式化url

/**

  * 格式化url

  * @param path 路径

  * @param params 参数

  * @param splicing 是否将剩余参数拼入路径

  */

  static formatUrl(path: string, params: any, splicing = false): string {

    if (!params) return path;

    let matchList = path.match(/\{\w+\}/gi);

    if (matchList && matchList.length) {

      matchList.forEach((m) => {

        let key = m.substring(1, m.length - 1);

        path = path.replace(m, params[key]);

        delete params[key];

      });

    }

    Object.keys(params).forEach((v) => {

      if (

        params[v] == null ||

        params[v] == undefined ||

        params[v].toString() == ''

      )

        delete params[v];

    });

    if (splicing) {

      path += '?' + new URLSearchParams(params).toString();

    }

    return path;

  }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容