拼多多2018校招前端筆試題之一满败,完成一個函數(shù)對各種變量進行復(fù)制且不影響原變量。
/**
* 各種變量的復(fù)制
*
* @variable 待復(fù)制的變量
* @return 復(fù)制結(jié)果
*/
function copy(variable) {
var result;
if(typeof variable != 'object') {
result = variable;
} else {
if(Array.isArray(variable)) {
result = variable.slice(0);
} else {
result = {};
for(var key in variable) {
result[key] = copy(variable[key]);
}
}
}
return result;
}
美團筆試題叹括, 密碼驗證算墨,要求
- 密碼由小寫字母、大寫字母汁雷、數(shù)字構(gòu)成净嘀。且必須同時含有三者。
- 不能以數(shù)字開頭
- 至少8位
顯然這個題主要考察正則侠讯,下面給出我的答案
var reg = /^[a-zA-Z]{1}(?![0-9a-z]+$)(?![0-9A-Z]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{7,}$/;
//正則解釋:
^[a-zA-Z]{1} //以一個字母開頭
(?![0-9a-z]+$) //后面存在大寫(存在不以數(shù)字或者小寫結(jié)尾的位置)
(?![0-9A-Z]+$) //后面存在小寫 (存在不以數(shù)字或者大寫結(jié)尾的位置)
(?![a-zA-Z]+$) //后面存在數(shù)字 (存在不以大寫或者小寫結(jié)尾的位置)
[0-9A-Za-z]{7,}$ //后面是至少7位大小寫字母數(shù)字
//或者
var reg = /^[a-zA-Z]{1}(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z]{7,}$/;
/?!exp/
當(dāng)前位置后存在不匹配exp的字符挖藏, 如/a(?!\d)/
能匹配'ab',但是不能匹配'a1'继低。所以/?!exp$/
匹配的就是當(dāng)前位置后面不以exp結(jié)束的位置熬苍。這里有一個有意思的地方,由于?!匹配的是當(dāng)前位置后面的字符袁翁,那么可以想象 (?!exp)$
是等價與$
的柴底。比如/^a$/
和/^a(?!\d)$/
都只能匹配'a'。
/?=exp/
當(dāng)前位置后存在匹配exp的字符粱胜, 如/a(?=\d)/
不能能匹配'ab'柄驻,但是能匹配'a1'。功能與/?焙压!exp/
相反鸿脓。所以(?=.*[0-9])
匹配的就是當(dāng)前位置后面存在以數(shù)字結(jié)束的位置抑钟,也就是必須存在數(shù)字
華為筆試題 (主機名排序)
主機名由多級域名組成,自右向左野哭,依次是頂級域名在塔、二級域名、三級域名拨黔,例如huawei.com.cn蛔溃,cn是頂級域名,com是二級域名篱蝇,huawei是
三級域名贺待。
請編寫一段程序,實現(xiàn)主機名排序功能零截,排序規(guī)則以及限制條件如下:
1麸塞、主機名按照域名等級排序,即先頂級域名排序涧衙,再二級域名排序哪工,最后是三級域名排序;
2弧哎、每一級域名排序時正勒,參考字典順序定義,abc 排在 abf傻铣,abc 排在 abcd 前。
3祥绞、輸入的主機名確保符合以下規(guī)則
A非洲、主機名以字符串形式給出,連續(xù)的兩個主機名蜕径,以’$’符號分開两踏;
B、主機名中僅包含小寫英文字母和分隔符’.’兜喻;
C梦染、主機名中沒有連續(xù)的’.’,不以’.’開始朴皆,也不以’.’結(jié)束帕识;
D、主機名不存在重復(fù)遂铡。
輸入
輸入為字符串肮疗,包含多個主機名,主機名之間以’$’符號分開扒接。
輸出
輸出為經(jīng)過排序后的字符串伪货,主機名之間以’$’符號分開们衙。
樣例輸入
huawei.com.cn$mail.huawei.com$imail.huawei.com$cctv.com.cn$bctv.com.cn
樣例輸出
cctv.com.cn$huawei.com.cn$imail.huawei.com$mail.huawei.com
cctv.com.cn$huawei.com.cn$imail.huawei.com$mail.huawei.com
var domains = ['mail.huawei.com','huawei.com','teltalk.org','google.com.hk','imail.huawei.com'];
function hostSort () {
var domainList = [];
for(var i=0; i<domains.length; i++) {
var domain = domains[i].split('.').reverse();
domainList[i] = {'top': domain[0], 'second': domain[1]};
if(domain.length==3) {
domainList[i]['third'] = domain[2];
}
}
domainList.sort(function (object1, object2) {
if (object1['top'] > object2['top']) {
return 1;
} else if(object1['top'] < object2['top']) {
return -1;
} else {
if (object1['second'] > object2['second']) {
return 1;
} else if(object1['second'] < object2['second']) {
return -1;
} else {
if(object1['third'] && object2['third']) {
if(object1['third'] > object2['third']) {
return 1;
} else if(object1['third'] < object2['third']) {
return -1;
} else {
return 0;
}
} else {
if((!object1['third']) && object2['third']) {
return -1;
} else {
return 1;
}
}
}
}
});
domains = [];
for(var i=0; i<domainList.length; i++) {
if(domainList[i]['third']) {
domains.push(domainList[i]['third']+'.'+domainList[i]['second']+'.'+domainList[i]['top']);
} else {
domains.push(domainList[i]['second']+'.'+domainList[i]['top']);
}
}
return domains
}