欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零)

 更新時(shí)間:2017年03月25日 21:25:38   投稿:mdxy-dxy  
這篇文章主要介紹了在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零),需要的朋友可以參考下

通常遇到的一個(gè)問題是日期的“1976-02-03 HH:mm:ss”這種格式 ,我的比較簡單的處理方法是這樣:

function formatDate(d) {
 var D=['00','01','02','03','04','05','06','07','08','09']
 with (d || new Date) return [
  [getFullYear(), D[getMonth()+1]||getMonth()+1, D[getDate()]||getDate()].join('-'),
  [D[getHours()]||getHours(), D[getMinutes()]||getMinutes(), D[getSeconds()]||getSeconds()].join(':')
 ].join(' ');
}

這種方法是邏輯比較簡單的,而且規(guī)則也簡單。除了with(d||new Date)的使用之外,也算不上什么技巧。但是,如果用這種方法來做數(shù)字字符串補(bǔ)0,那么結(jié)果顯然不妙。51js的月影提供了另一個(gè)方案:

function pad(num, n) {
 return Array(n>num?(n-(''+num).length+1):0).join(0)+num;
}

調(diào)用示例如下:

pad(100, 4); // 輸出:0100

月影在這里分析了其中的技巧,以及代碼長短與效率上的平衡:
最后月影推薦的是“質(zhì)樸長存法”:

/* 質(zhì)樸長存法 by lifesinger */
function pad(num, n) {
  var len = num.toString().length;
  while(len < n) {
    num = "0" + num;
    len++;
  }
  return num;
}

這個(gè)在“沒事就射鳥”同學(xué)的博客里做了分析
月影同學(xué)有一件事是沒有做的,就是沒說明“為什么那個(gè)短代碼的效率更低?”。
答案是“表面看來,用array.join來替代循環(huán)是高效的,但忘掉了一個(gè)數(shù)組創(chuàng)建的開銷”。對此有沒有法子呢?我有過另一個(gè)解決的思路。如下:

/* 查表法(不完善) by aimingoo */
pad = function(tbl) {
 return function(num, n) {
  return (((tbl[n = n-num.toString().length]) || (tbl[n] = Array(n).join(0))) + num);
 }
}([]);

這個(gè)路子跟前面的formatDate()是一樣的,只不是formatDate()里的表是一個(gè)確定的數(shù)組,而這里的數(shù)組則是動態(tài)生成,然后緩存在tbl[]里面。這個(gè)緩存的tbl[]數(shù)組是使用一個(gè)函數(shù)調(diào)用參數(shù)的形式,保持在最終的pad()函數(shù)的上層閉包里面。為了讓上面的這個(gè)過程清晰一點(diǎn),我重排代碼格式如下:

pad = function(tbl) {
 return function(num, n) {
  return (
   ((tbl[n = n-num.toString().length]) ||
    (tbl[n] = Array(n).join(0))) +
   num
  );
 }
}([]);

好的。到這里,先別急,還有兩個(gè)問題要解決。其一,當(dāng)不需要補(bǔ)0時(shí),上述的tbl[0]返回空值,所以會進(jìn)入到“||”運(yùn)算的第二個(gè)分支,因此導(dǎo)致Array()重算一次,也就是說“不補(bǔ)0的情況效率其實(shí)最低”。其二,當(dāng)num長度大于n時(shí),也就變成了“補(bǔ)負(fù)數(shù)個(gè)零”?!把a(bǔ)負(fù)數(shù)個(gè)零”顯然不行,一般對此處理成“不需要補(bǔ)零”,于是又回到了第一個(gè)問題。

這兩個(gè)問題可以一次解決,其實(shí)就是多一次判斷:

/* 查表法(完善版本) by aimingoo */
pad = function(tbl) {
 return function(num, n) {
  return (0 >= (n = n-num.toString().length)) ? num : (tbl[n] || (tbl[n] = Array(n+1).join(0))) + num;
 }
}([]);

當(dāng)然,也可以象前面一樣整理一下這個(gè)代碼格式?;蛘?,采用一個(gè)完全不用“(函數(shù)式語言的)連續(xù)運(yùn)算等技巧”的版本:

/* 查表法(過程式版本) by aimingoo */
pad = function() {
 var tbl = [];
 return function(num, n) {
  var len = n-num.toString().length;
  if (len <= 0) return num;
  if (!tbl[len]) tbl[len] = (new Array(len+1)).join('0');
  return tbl[len] + num;
 }
}();

算法永遠(yuǎn)都是如此,要不是時(shí)間換空間,要不就是空間換時(shí)間。射雕同學(xué)的“質(zhì)樸長存法”是時(shí)間換空間的方法,而這里的查表法則是空間換時(shí)間的方案。這個(gè)函數(shù)會在tbl中持續(xù)一個(gè)字符串?dāng)?shù)組,如果num是非常經(jīng)常變化的,那么效率也不會有太大提升——對于過于頻繁變化的系統(tǒng),緩存就意義不大了。其實(shí)邏輯都差不多,月影同學(xué)只是少走了一步而已。

相關(guān)文章

  • JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式實(shí)例分析

    JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式實(shí)例分析

    這篇文章主要介紹了JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式,簡單講述了構(gòu)造器模式的概念、原理,并結(jié)合實(shí)例形式分析了構(gòu)造器模式的定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • 通過高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法

    通過高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法

    這篇文章主要介紹了通過高德地圖API獲得某條道路上的所有坐標(biāo)用于描繪道路的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 循環(huán) vs 遞歸淺談

    循環(huán) vs 遞歸淺談

    本文代碼使用 JavaScript。 一些同學(xué)對遞歸的理解還停留在“是一種求階乘比循環(huán)低效的方法”。但其實(shí)遞歸和循環(huán)處理的問題是不同。拿“遍歷數(shù)組”這個(gè)問題來說:循環(huán)適合同一維度(單層長度不限)上的遍歷,而遞歸則適合跨維度(層數(shù)不限)的遍歷。
    2013-02-02
  • 理解Javascript圖片預(yù)加載

    理解Javascript圖片預(yù)加載

    這篇文章主要介紹了Javascript圖片預(yù)加載,幫助大家理解Javascript圖片預(yù)加載的實(shí)現(xiàn)原理,感興趣的小伙伴們可以參考一下
    2016-02-02
  • js讀取本地文件的實(shí)例

    js讀取本地文件的實(shí)例

    下面小編就為大家分享一篇js讀取本地文件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 微信小程序tabBar組件切換與下拉刷新實(shí)現(xiàn)詳解

    微信小程序tabBar組件切換與下拉刷新實(shí)現(xiàn)詳解

    tabBar相對而言用的還是比較多的,但是用起來并沒有難,下面這篇文章主要給大家介紹了關(guān)于微信小程序全局配置之tabBar的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • JS實(shí)現(xiàn)靜止元素自動移動示例

    JS實(shí)現(xiàn)靜止元素自動移動示例

    這篇文章主要介紹了JS實(shí)現(xiàn)靜止元素自動移動的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-04-04
  • 純JS單頁面賽車游戲制作代碼分享

    純JS單頁面賽車游戲制作代碼分享

    這篇文章主要為大家分享了純JS單頁面賽車游戲制作代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-06-06
  • Js獲取圖片原始寬高的實(shí)現(xiàn)代碼

    Js獲取圖片原始寬高的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)硪黄狫s獲取圖片原始寬高的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2016-05-05

最新評論