• JavaScript 编程黑科技,一些小技巧(一)


    1、论如何优雅的取随机字符串(.substring() 的第二个参数控制取多少位 (最多可取13位))

    Math.random().toString(16).substring(2) // 13位
    Math.random().toString(36).substring(2) // 11位

    2、论如何优雅的取整

    var a = ~~2.33
    var b= 2.33 | 0
    var c= 2.33 >> 0

     3、如何优雅的实现金钱格式化:1234567890 --> 1,234,567,890;

    用toLocaleString()实现

    用正则魔法实现:

    var test1 = '1234567890'
    var format = test1.replace(/B(?=(d{3})+(?!d))/g, ',')
    console.log(format) // 1,234,567,890

    非正则的优雅实现:

    function formatCash(str) {
           return str.split('').reverse().reduce((prev, next, index) => {
                return ((index % 3) ? next : (next + ',')) + prev
           })
    }
    console.log(formatCash('1234567890')) // 1,234,567,890

    4、论如何最佳的让两个整数交换数值

    var a=1,b=2;
    a += b;
    b = a - b;
    a -= b;

    缺点也很明显,整型数据溢出,对于32位字符最大表示数字是2147483647,如果是2147483645和2147483646交换就失败了。黑科技办法:

    a ^= b;
    b ^= a;
    a ^= b;

     3.1 使用&运算符判断一个数的奇偶

    // 偶数 & 1 = 0
    // 奇数 & 1 = 1
    console.log(2 & 1)    // 0
    console.log(3 & 1)    // 1

    3.2  使用~, >>, <<, >>>, |来取整

    console.log(~~ 6.83)    // 6
    console.log(6.83 >> 0)  // 6
    console.log(6.83 << 0)  // 6
    console.log(6.83 | 0)   // 6
    // >>>不可对负数取整
    console.log(6.83 >>> 0)   // 6

     看不懂的童鞋建议去补习一下C语言的位操作。

    5、最短的代码实现数组去重

    [...new Set([1, "1", 2, 1, 1, 3])]

     6、取出一个数组中的最大值和最小值

    var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; 
    var maxInNumbers = Math.max.apply(Math, numbers); 
    var minInNumbers = Math.min.apply(Math, numbers);

    7、一行代码完成时间戳转换

    // 传入时间戳
    function time(t) {
      var date = new Date(t);
      return date.toJSON().substr(0,19).replace('T', ' ') // 2018-09-02 18:34:35
      // return date.toJSON().substr(0,19).replace('T', ' ').replace(/-/g, '.') // 2018.09.02 18:34:35
    }
    time(t) 

    Date的‘toJSON’方法返回格林威治时间的JSON格式字符串,实际是使用‘toISOString’方法的结果。字符串形如‘2018-08-09T10:20:54.396Z’,转化为北京时间需要额外增加八个时区,我们需要取字符串前19位,然后把‘T’替换为空格,即是我们需要的时间格式。

    8、计算数组中每个元素出现的次数

    var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    
    var countedNames = names.reduce(function (allNames, name) { 
      if (name in allNames) {
        allNames[name]++;
      }
      else {
        allNames[name] = 1;
      }
      return allNames;
    }, {});
    // countedNames is:
    // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

    9、if语法简化

    假如我们有下面的代码:

    if(value === 'duck' || value === 'dog' || value === 'cat') {
      // ...
    }

    我们可以这样写:

    const options = ['duck', 'dog', 'cat'];
    if (options.includes(value)) {
      // ...
    }

     10、求2个数组的交集

    const firstArray = [2, 2, 4, 1];
    const secondArray = [1, 2, 0, 5];
    
    function intersection(firstArray, secondArray) {
      const hashmap = {};
      const intersectionArray = [];
    
      firstArray.forEach(element => {
        console.log(element)
        hashmap[element] = 1;
      });
      console.log(hashmap)
    
      secondArray.forEach(element => {
        console.log(hashmap[element])
        if (hashmap[element] === 1) {
          intersectionArray.push(element);
          hashmap[element]++;
    
        }
      });
    
      return intersectionArray;
    }
    intersection(firstArray, secondArray); // [2, 1]
  • 相关阅读:
    IIS和tomcat共用80端口
    CYQ.Data V5 从入门到放弃ORM系列:教程
    C#中==与Equals方法的区别
    一个简单得不能再简单的“ORM”了
    msbuild ConfuserEx.Build 加密
    C#生成注册码
    从多个XML文档中读取数据用于显示webapi帮助文档
    ASP.NET MVC SSO 单点登录设计与实现
    ASP.NET MVC Bootstrap极速开发框架
    Nodejs初阶之express
  • 原文地址:https://www.cnblogs.com/chailuG/p/13985265.html
Copyright © 2020-2023  润新知