Javascript中的一些小trick

下面是收集了一些Javascript中的一些小技能,会不定时更新,迎接留言补充。

数字0-6到“一二三四五六日”的对应

Javascript中的日期对象取得礼拜时是运用getDay()要领,取得的是0-6的数字

要完成的要领是

var chineseWeek = getChineseWeek(3); // chineseWeek为三

比较烦琐的完成要领有switch

注重:以下完成都省略了空值推断等

var getChineseWeek = function(n) {

    var w = '';
    switch(n) {
        case 0:
            w = '日';
            break;
        case 1:
            w = '一';
            break;
        ...
    }
    return w;
};

第二种能够运用数组

var getChineseWeek = function(n) {
    return ['日', '一', '二', '三', '四', '五', '六'][n];
};

第三种运用字符串

var getChineseWeek = function(n) {
    return '日一二三四五六'.charAt(n);
};

疾速取得规范的时刻花样

我们经常有如许的需求,把当前的时刻转化为2014-06-23 11:36:41的情势,一般的完成体式格局是

var formatNum = function(n) {
    return n > 10 ? n : '0' + n;
};

var getCurrDateTime = function() {
    var d = new Date(),
        year = d.getFullYear(),
        month = d.getMonth() + 1,
        day = d.getDate(),
        hour = d.getHours(),
        min = d.getMinutes(),
        sec = d.getSeconds();
    return year +
        '-' +
        formatNum(month) +
        '-' +
        formatNum(day) +
        ' ' +
        formatNum(hour) +
        ':' +
        formatNum(min) +
        ':' +
        formatNum(sec);
};

我们能够运用正则简化一下

var getCurrDateTime = function() {
    var d = new Date();
    var dt = d.getFullYear() +
        '-' +
        (d.getMonth() + 1) +
        '-' +
        d.getDate() +
        ' ' +
        d.getHours() +
        ':' +
        d.getMinutes() +
        ':' +
        d.getSeconds();
    return dt.replace(/([-:\s])(\d{1})(?!\d)/g, '$10$2');
};

剖析:

/([-:\s])(\d{1})(?!\d)/这段正则的意义是,婚配前面是-或许:或许空格的而且背面不是数字的单个数字,像2014-6-12 6:7:43这里面的赤色数字会被婚配。然后$1是指婚配到的-或许:或许空格,$2是指婚配到的单个数字,$10$2即完成了单个数字前面补0的结果。

取得一个数组的随机副本

要求是

var arr = [3, 6, 8, 1, 0, 10, 67, 23];
var arr2 = shuffle(arr); // arr2 => [67, 0, 10, 1, 8, 3, 6, 23]

去百度口试的时刻,口试官出过这么一个问题,由于看过underscore的源码,所以写出了underscore的完成要领,以下:

_.shuffle = function(obj) {
    var rand;
    var index = 0;
    var shuffled = [];
    each(obj, function(value) {
        rand = _.random(index++);
        shuffled[index - 1] = shuffled[rand];
        shuffled[rand] = value;
    });
    return shuffled;
};

道理就是取得一个随机索引,依据随机索引掏出数组中随机的一个,与最新的一个值举行交流。

然背口试官给出了别的一种完成体式格局,道理也差不多

var shuffle = function(array, length) {
    var length = length || array.length,
        newArr = [],
        randomIndex,
        removed;
    array.forEach(function(elem, index) {
        randomIndex = Math.floor(Math.random() * index);
        removed = newArr.splice(randomIndex, 1, elem);
        removed.length && newArr.push(removed[0]);
    });
    return newArr.slice(0, length);
};

厥后有时发现了别的一种更牛逼的完成体式格局

var shuffle = function(array, length) {
    var length = length || array.length;
    var array = array.slice();
    array.sort(function() {
        return Math.random() - 0.5;    
    });
    return array.slice(0, length);
};

猎取随机码

随机码是形如如许情势的字符串be0e2bbd329b35ed,在JavaScript中有普遍的运用。
比方在编写jQuery插件时,为了标识每个插件实例,经常运用随机码来设置ID。

专业的叫法是uuid,能够坚持唯一性,具有庞杂的算法,这里仅仅引见简朴的。

以下枚举几种天生要领

第一种

var S4 = function() {
    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
};

// 随机水平能够跟着S4的挪用次数而变化
var guid = function() {
    return S4() + S4() + S4() + S4();
};

第二种

道理差不多

Math.random().toString(36).substring(2);

交流值

第一种

var a = 1, b = 2;
a = [b, b = a][0];

第二种

var a = 1, b = 2;
a = [b][b = a, 0];

请自行意会。

将一个数组插进去另一个数组的指定位置

看到这个题目,最早想到的应该是运用数组的splice要领,然则splice要领接收的参数是须要一个一个写出来的

arrayObject.splice(index, howmany, item1,.....,itemX)

到这里,能够想到运用apply来转变参数的通报体式格局,终究代码以下:

var a = [1,2,3,7,8,9];
var b = [4,5,6];
var insertIndex = 3;
a.splice.apply(a, Array.prototype.concat(insertIndex, 0, b));
    原文作者:chshouyu
    原文地址: https://segmentfault.com/a/1190000000586804
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞