javascript有效的代碼片斷

JavaScript有效的代碼片斷

小數取整

const x = 1.234;
~~x    //1
x >>   //1
x | 0  //1
Math.floor(x)  //1

const y = -1.4;
x >>   //-1
Math.floor(y)   //-2

按位運算符直接去掉小數,
Math.floor()向下取整,返回的數小於即是本來的數。

天生n位隨機數

let getRandom = n => Math.random().toString().slice(-n);
getRandom(6)   //6位隨機數

天生16進制色彩

let colorCode = '#' +('00000' +(Math .random()* 0x1000000 << 0).toString(16)).slice(- 6);

n到m間隨機整數

let randomNum = (n,m) => Math.floor(Math.random()*(m-n) + n);
randomNum(2,10)   //2-10之間的整數

天生n到m間的隨機整數,不包括m,n和m可認為負數。

駝峰定名轉下劃線

let humpToUnderline = str => str.match(/^[a-z][a-z0-9]+|[A-Z][a-z0-9]*/g).join('_').toLowerCase();
humpToUnderline('helloWorld');  //hello_world

url參數轉json

let urlToJson = url => {
    let json = {};
    if (!!!url) return json;
    let data = url.split('?')[1] ? url.split('?')[1].split('&') : [];
    for(let i=0; i<data.length; i++) {
        let k = data[i].split('=');
        k[0] && (json[k[0]] = k[1] || '');
    }
    return json;
}

獵取url中的參數

let getUrlData = name => {
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    let r = window.location.search.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]);
    return null;
}

n維數組轉1維數組

let flatten = arr => JSON.parse(`[${JSON.stringify(arr).replace(/\[|]/g, '')}]`);
let flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
let flatten = a => Array.isArray(a) ? [].concat(...a.map(flatten)) : a;

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

n維數組展開成字符串

let arr = [1,3,[4,[72,'a','d'],3,[6,'c'],d]];

arr+'';
arr.toString();
arr.join();
JSON.stringify(arr).replace(/\[|\]/g,'');

//'1,3,4,72,"a","d",3,6,"c"'

時候花樣化

//時候花樣化
function format1(x, y) {
    let i = 0;
    var z = {
        y: x.getFullYear(),
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    return y.replace(/(y+|M+|d+|h+|m+|s+)/g, function(v) {
        console.log(++i);
        return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-(v.length > 2 ? v.length : 2))
    });
}

format1(new Date(), 'yyyy-MM-dd h:m:s');   //2018-01-22 9:38:10

統計筆墨個數

//統計筆墨個數
function wordCount(data) {
  var pattern = /[a-zA-Z0-9_\u0392-\u03c9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g;
  var m = data.match(pattern);
  var count = 0;
  if( m === null ) return count;
  for (var i = 0; i < m.length; i++) {
    if (m[i].charCodeAt(0) >= 0x4E00) {
      count += m[i].length;
    } else {
      count += 1;
    }
  }
  return count;
}

var text = '統計筆墨個數';
// console.log(wordCount(text)); // 6

花樣化数字

//法一
function formatNum (str) {
    return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

//法二
function formatNum (str) {
    return str.split('').reverse().reduce((prev, next, index) => {
        return ((index % 3) ? next : (next + ',')) + prev
    })
}

檢測質數

function isPrime(n) {
    return !(/^.?$|^(..+?)\1+$/).test('1'.repeat(n))
}

統計字符湧現的次數

function strTimes (str) {
    return str.split('').reduce((p,n) => (p[n]++ || (p[n]=1) ,p), {});   
}    

評級

let grade = rate => "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);

字符串範例的数字轉数字

let a = '1';
+a   //1;

+a 能夠理解為
Number(a),將一個變量轉成数字。布爾值返回0或1,
undefined返回
NaN,数字直接返回,
null返回0,關於字符串,將其轉換為十進制數值,會疏忽前面的0(16進制除外),空字符串返回0,浮點數會返回浮點數值。其他花樣字符串(不管是不是数字開首,返回NaN,字符串中好幾個小數點,返回
NaN

數組去反覆

[...new Set(arr)]

更多更細緻的數組去重要領

獵取時候戳

(new Date()).getTime();
(new Date).getTime();
new Date().getTime();
+new Date();
Date.now();
    原文作者:zhaoqing
    原文地址: https://segmentfault.com/a/1190000014707962
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞