在js中做數字字串加0補位,效率分析

2022-07-07 23:12:16 字數 1456 閱讀 8392

分類: jquery/yui/extjs

舉報function

date

演算法語言

c通常遇到的乙個問題是日期的「1976-02-03 hh:mm:ss」這種格式 ,我的比較簡單的處理方法是這樣:

function formatdate(d)

這種方法是邏輯比較簡單的,而且規則也簡單。除了with(d||new date)的使用之外,也算不上什麼技巧。但是,如果用這種方法來做數字字串補0,那麼結果顯然不妙。51js的月影提供了另乙個方案:

function pad(num, n)

呼叫示例如下:

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

月影在這裡分析了其中的技巧,以及**長短與效率上的平衡:

/* 質樸長存法  by lifesinger */

function pad(num, n)

return num;

}這個在「沒事就射鳥」同學的部落格裡做了分析:

月同學有一件事是沒有做的,就是沒說明「為什麼那個短**的效率更低?」。

答案是「表面看來,用array.join來替代迴圈是高效的,但忘掉了乙個陣列建立的開銷」。對此有沒有法子呢?我有過另乙個解決的思路。如下:

/* 查表法(不完善)  by aimingoo */

pad = function(tbl)

}();

這個路子跟前面的formatdate()是一樣的,只不是formatdate()裡的表是乙個確定的陣列,而這裡的陣列則是動態生成,然後快取

在tbl裡面。這個快取的tbl陣列是使用乙個函式呼叫引數的形式,保持在最終的pad()函式的上層閉包裡面。為了讓上面的這個過程清晰一點,

我重排**格式如下:

pad = function(tbl)

}();

好的。到這裡,先別急,還有兩個問題要解決。其一,當不需要補0時,上述的tbl[0]返回空值,所以會進入到「||」運算的第二個分支,因此導致

array()重算一次,也就是說「不補0的情況效率其實最低」。其二,當num長度大於n時,也就變成了「補負數個零」。「補負數個零」顯然不行,一般

對此處理成「不需要補零」,於是又回到了第乙個問題。

這兩個問題可以一次解決,其實就是多一次判斷:

/* 查表法(完善版本)  by aimingoo */

pad = function(tbl)

}();

/* 查表法(過程式版本)  by aimingoo */

pad = function()

}();

演算法永遠都是如此,要不是時間換空間,要不就是空間換時間。射鵰同學的「質樸長存法」是時間換空間的方法,而這裡的查表法則是空間換時間的方案。這

個函式會在tbl中持續乙個字串陣列,如果num是非常經常變化的,那麼效率也不會有太大提公升——對於過於頻繁變化的系統,快取就意義不大了。其實邏輯

都差不多,月影同學只是少走了一步而已。

js 中 中文 空格 數字 字串混合排序

最近有個需求,需要對後台的陣列物件按照某個屬性進行排序,屬性值可能是 中文 字串 數字 特殊字元 空字串,網上大部分都只是針對某乙個型別進行排序,在參考這篇部落格的基礎之上增加了對於空字串的判斷這種混合排序的比較少見,話不多說,直接上 呼叫 var goods comparearray goods,...

js中陣列 數字 字串之間的轉換

純數字轉換 1 字串在運算操作中會被當做數字型別來處理 var s 3265 console.log s 1 32652 字元前面加 var s 3265 console.log s 32653 string的兩個轉換函式,只對string有效 var s 3265 console.log pars...

JS中同步顯示並分割輸入的數字字串

題目比較晦澀,來張圖來說明要表達的效果 第一張圖的效果就是,使用者輸入乙個數字,上面就顯示乙個大層,然後顯示輸入的數字,並把數字用空格按照每四位分割出來。好像在建行的網上銀行上面就有這種效果。第二個圖的效果就是使用者在乙個文字框中輸入一串數字,然後再游標離開的時候,把數字按照每三位用逗號給分割開來,...