(001)獲取 url 中的參數
要求
- 指定參數名稱,返回該參數的值 或者 空字符串
- 不指定參數名稱,返回全部的參數對象 或者 {}
- 如果存在多個同名參數,則返回數組
輸入例子:
getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
輸出例子:
['1', '2', '3']
代碼實現
function getUrlParam(sUrl,sKey){
var result = {};
sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){
if(result[k] !== void 0){
var t = result[k];
result[k] = [].concat(t,v);
}else{
result[k] = v;
}
});
if(sKey === void 0){
return result;
}else{
return result[sKey] || '';
}
}
(002)dom 節點查找
要求
- 查找兩個節點的最近的一個共同父節點,可以包括節點自身
oNode1 和 oNode2 在同一文檔中,且不會爲相同的節點
代碼實現
function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
}else{
return commonParentNode(oNode1.parentNode,oNode2);
}
}
(003)數組去重
要求
爲 Array 對象添加一個去除重複項的方法
輸入例子:
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()
輸出例子:
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
代碼實現
Array.prototype.uniq = function () {
var resArr = [];
var flag = true;
for(var i=0;i<this.length;i++){
if(resArr.indexOf(this[i]) == -1){
if(this[i] != this[i]){ //排除 NaN
if(flag){
resArr.push(this[i]);
flag = false;
}
}else{
resArr.push(this[i]);
}
}
}
return resArr;
}
(004)斐波那契數列
要求
用 JavaScript 實現斐波那契數列函數,返回第n個斐波那契數。 f(1) = 1, f(2) = 1 等
代碼實現
function fibonacci(n) {
var one=1;
var two=1;
for(var i=3;i<=n;i++){
var three=one+two;
one=two;
two=three;
}
return three;
}
(005)時間格式化輸出
要求
按所給的時間格式輸出指定的時間
對於 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,補滿兩位,09
M: 月份, 9
dd: 日期,補滿兩位,05
d: 日期, 5
HH: 24制小時,補滿兩位,13
H: 24制小時,13
hh: 12制小時,補滿兩位,01
h: 12制小時,1
mm: 分鐘,補滿兩位,14
m: 分鐘,14
ss: 秒,補滿兩位,20
s: 秒,20
w: 星期,爲 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一個,本 demo 結果爲 五
輸入例子:
formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
輸出例子:
2014-09-05 13:14:20 星期五
代碼實現
function formatDate(t,str){
var obj = {
yyyy:t.getFullYear(),
yy:(""+ t.getFullYear()).slice(-2),
M:t.getMonth()+1,
MM:("0"+ (t.getMonth()+1)).slice(-2),
d:t.getDate(),
dd:("0" + t.getDate()).slice(-2),
H:t.getHours(),
HH:("0" + t.getHours()).slice(-2),
h:t.getHours() % 12,
hh:("0"+t.getHours() % 12).slice(-2),
m:t.getMinutes(),
mm:("0" + t.getMinutes()).slice(-2),
s:t.getSeconds(),
ss:("0" + t.getSeconds()).slice(-2),
w:['日', '一', '二', '三', '四', '五', '六'][t.getDay()]
};
return str.replace(/([a-z]+)/ig,function($1){return obj[$1]});
}
(006)獲取字符串的長度
要求
如果第二個參數 bUnicode255For1 === true,則所有字符長度爲 1
否則如果字符 Unicode 編碼 > 255 則長度爲 2
輸入例子:
strLength('hello world, 牛客', false)
輸出例子:
17
代碼實現
function strLength(s, bUnicode255For1) {
var sLength=0;
if(bUnicode255For1===true){
return s.length;
}else{
for(var i=0;i<s.length;i++){
if(s.charCodeAt(i)>255){
sLength+=2;
}else{
sLength+=1;
}
}
}
return sLength;
}
(007)郵箱字符串判斷
要求
判斷輸入是否是正確的郵箱格式
輸入例子:
郵箱字符串
輸出例子:
true表示格式正確
代碼實現
function isAvailableEmail(sEmail) {
var reg = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;
return reg.test(sEmail);
}
(008)顏色字符串轉換
要求
將 rgb 顏色字符串轉換爲十六進制的形式,如 rgb(255, 255, 255) 轉爲 #ffffff
- rgb 中每個 , 後面的空格數量不固定
- 十六進制表達式使用六位小寫字母
- 如果輸入不符合 rgb 格式,返回原始輸入
輸入例子:
rgb2hex('rgb(255, 255, 255)')
輸出例子:
#ffffff
代碼實現
function rgb2hex(sRGB) {
return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(a, r, g, b){
return '#' + hex(r) + hex(g) + hex(b);
});
}
function hex(n){
return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}
(009)將字符串轉換爲駝峯格式
要求
css 中經常有類似 background-image 這種通過 - 連接的字符,通過 javascript 設置樣式的時候需要將這種樣式轉換成 backgroundImage 駝峯格式,請完成此轉換功能
- 以 - 爲分隔符,將第二個起的非空單詞首字母轉爲大寫
- -webkit-border-image 轉換後的結果爲 webkitBorderImage
輸入例子:
cssStyle2DomStyle('font-size')
輸出例子:
fontSize
代碼實現
function cssStyle2DomStyle(sName) {
return sName.replace(/(?!^)\-(\w)(\w+)/g, function(a, b, c){
return b.toUpperCase() + c.toLowerCase();
}).replace(/^\-/, '');
}
(010)字符串字符統計
要求
統計字符串中每個字符的出現頻率,返回一個 Object,key 爲統計字符,value 爲出現頻率
- 不限制 key 的順序
- 輸入的字符串參數不會爲空
- 忽略空白字符
輸入例子:
count('hello world')
輸出例子:
{h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}
代碼實現
function count(str) {
for(var i=0, m=str.length, res={}; i<m; i++){
if(str.charAt(i) in res) res[str.charAt(i)]++;
else res[str.charAt(i)] = 1;
}
return res;
}
有錯誤的地方歡迎指正,以便及時修改!O(∩_∩)O~