摘要:下面是收集了一些中的一些小技巧,會(huì)不定時(shí)更新,歡迎留言補(bǔ)充。專(zhuān)業(yè)的叫法是,可以保持唯一性,具有復(fù)雜的算法,這里僅僅介紹簡(jiǎn)單的。以下列舉幾種生成方法第一種隨機(jī)程度可以隨著的調(diào)用次數(shù)而變化第二種原理差不多交換值第一種第二種請(qǐng)自行領(lǐng)悟。
下面是收集了一些Javascript中的一些小技巧,會(huì)不定時(shí)更新,歡迎留言補(bǔ)充。
數(shù)字0-6到“一二三四五六日”的對(duì)應(yīng)Javascript中的日期對(duì)象得到星期時(shí)是使用getDay()方法,得到的是0-6的數(shù)字
要實(shí)現(xiàn)的方法是
var chineseWeek = getChineseWeek(3); // chineseWeek為三
比較啰嗦的實(shí)現(xiàn)方法有switch
注意:以下實(shí)現(xiàn)都省略了空值判斷等
var getChineseWeek = function(n) { var w = ""; switch(n) { case 0: w = "日"; break; case 1: w = "一"; break; ... } return w; };
第二種可以使用數(shù)組
var getChineseWeek = function(n) { return ["日", "一", "二", "三", "四", "五", "六"][n]; };
第三種使用字符串
var getChineseWeek = function(n) { return "日一二三四五六".charAt(n); };快速得到標(biāo)準(zhǔn)的時(shí)間格式
我們經(jīng)常有這樣的需求,把當(dāng)前的時(shí)間轉(zhuǎn)化為2014-06-23 11:36:41的形式,通常的實(shí)現(xiàn)方式是
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); };
我們可以使用正則簡(jiǎn)化一下
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)/這段正則的意思是,匹配前面是-或者:或者空格的并且后面不是數(shù)字的單個(gè)數(shù)字,像2014-6-12 6:7:43這里面的紅色數(shù)字會(huì)被匹配。然后$1是指匹配到的-或者:或者空格,$2是指匹配到的單個(gè)數(shù)字,$10$2即實(shí)現(xiàn)了單個(gè)數(shù)字前面補(bǔ)0的效果。
得到一個(gè)數(shù)組的隨機(jī)副本要求是
var arr = [3, 6, 8, 1, 0, 10, 67, 23]; var arr2 = shuffle(arr); // arr2 => [67, 0, 10, 1, 8, 3, 6, 23]
去百度面試的時(shí)候,面試官出過(guò)這么一個(gè)題目,因?yàn)榭催^(guò)underscore的源碼,所以寫(xiě)出了underscore的實(shí)現(xiàn)方法,如下:
_.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; };
原理就是獲得一個(gè)隨機(jī)索引,根據(jù)隨機(jī)索引取出數(shù)組中隨機(jī)的一個(gè),與最新的一個(gè)值進(jìn)行交換。
然后面試官給出了另外一種實(shí)現(xiàn)方式,原理也差不多
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); };
后來(lái)偶然發(fā)現(xiàn)了另外一種更牛逼的實(shí)現(xiàn)方式
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); };獲取隨機(jī)碼
隨機(jī)碼是形如這樣形式的字符串be0e2bbd329b35ed,在JavaScript中有廣泛的應(yīng)用。
比如在編寫(xiě)jQuery插件時(shí),為了標(biāo)識(shí)每一個(gè)插件實(shí)例,常常使用隨機(jī)碼來(lái)設(shè)置ID。
專(zhuān)業(yè)的叫法是uuid,可以保持唯一性,具有復(fù)雜的算法,這里僅僅介紹簡(jiǎn)單的。
以下列舉幾種生成方法
第一種var S4 = function() { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); }; // 隨機(jī)程度可以隨著S4的調(diào)用次數(shù)而變化 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];
請(qǐng)自行領(lǐng)悟。
將一個(gè)數(shù)組插入另一個(gè)數(shù)組的指定位置看到這個(gè)標(biāo)題,最先想到的應(yīng)該是使用數(shù)組的splice方法,但是splice方法接受的參數(shù)是需要一個(gè)一個(gè)寫(xiě)出來(lái)的
arrayObject.splice(index, howmany, item1,.....,itemX)
到這里,可以想到使用apply來(lái)改變參數(shù)的傳遞方式,最終代碼如下:
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));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78169.html
摘要:要達(dá)到想要的效果正確的做法是即用來(lái)產(chǎn)生一個(gè)立即作用域,保證回調(diào)函數(shù)執(zhí)行的時(shí)候最近的原型作用域的就是當(dāng)時(shí)循環(huán)的。判斷數(shù)組中是否存在滿(mǎn)足條件的項(xiàng),只要有一項(xiàng)滿(mǎn)足條件,就會(huì)返回。 之前常常因?yàn)椴蛔⒁猓?xí)慣用寫(xiě)PHP或者Java的方式來(lái)寫(xiě)nodejs,產(chǎn)生了了一些錯(cuò)誤,這里總結(jié)一些小小的trick,以便于展示nodejs的不同,和平時(shí)需要注意的地方。 變量提升 var variable = g...
摘要:沒(méi)有安裝全局某個(gè)項(xiàng)目不影響該命令的使用。該標(biāo)志會(huì)安裝,忽略。這會(huì)確保開(kāi)發(fā)所使用的工具及不會(huì)進(jìn)入生產(chǎn)環(huán)境。結(jié)果就是,發(fā)布項(xiàng)目時(shí),不得不審查兩個(gè)文件是否同步,防止敏感信息的泄露。確保更改默認(rèn)的用戶(hù)名,作為用戶(hù)名環(huán)境變量的值。 本文轉(zhuǎn)載自:眾成翻譯譯者:文藺鏈接:http://www.zcfy.cc/article/1206原文:https://nodesource.com/blog/ele...
摘要:正式發(fā)布已正式發(fā)布,新版本重點(diǎn)關(guān)注工具鏈以及工具鏈在中的運(yùn)行速度問(wèn)題。文章內(nèi)容包括什么是內(nèi)存,內(nèi)存生命周期,中的內(nèi)存分配,內(nèi)存釋放,垃圾收集,種常見(jiàn)的內(nèi)存泄漏以及如何處理內(nèi)存泄漏的技巧。 1. Angular 6 正式發(fā)布 Angular 6.0.0 已正式發(fā)布,新版本重點(diǎn)關(guān)注工具鏈以及工具鏈在 Angular 中的運(yùn)行速度問(wèn)題。Angular v6 是統(tǒng)一整體框架、Material ...
摘要:正式發(fā)布已正式發(fā)布,新版本重點(diǎn)關(guān)注工具鏈以及工具鏈在中的運(yùn)行速度問(wèn)題。文章內(nèi)容包括什么是內(nèi)存,內(nèi)存生命周期,中的內(nèi)存分配,內(nèi)存釋放,垃圾收集,種常見(jiàn)的內(nèi)存泄漏以及如何處理內(nèi)存泄漏的技巧。 1. Angular 6 正式發(fā)布 Angular 6.0.0 已正式發(fā)布,新版本重點(diǎn)關(guān)注工具鏈以及工具鏈在 Angular 中的運(yùn)行速度問(wèn)題。Angular v6 是統(tǒng)一整體框架、Material ...
閱讀 2404·2021-11-23 09:51
閱讀 1217·2021-11-22 13:54
閱讀 3427·2021-09-24 10:31
閱讀 1092·2021-08-16 10:46
閱讀 3627·2019-08-30 15:54
閱讀 707·2019-08-30 15:54
閱讀 2889·2019-08-29 17:17
閱讀 3162·2019-08-29 15:08