拼多多2018校招前端笔试题之一,完成一个函数对各种变量进行复制且不影响原变量。
/**
* 各种变量的复制
*
* @variable 待复制的变量
* @return 复制结果
*/
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;
}
美团笔试题, 密码验证,要求
- 密码由小写字母、大写字母、数字构成。且必须同时含有三者。
- 不能以数字开头
- 至少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]+$) //后面存在大写(存在不以数字或者小写结尾的位置)
(?![0-9A-Z]+$) //后面存在小写 (存在不以数字或者大写结尾的位置)
(?![a-zA-Z]+$) //后面存在数字 (存在不以大写或者小写结尾的位置)
[0-9A-Za-z]{7,}$ //后面是至少7位大小写字母数字
//或者
var reg = /^[a-zA-Z]{1}(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z]{7,}$/;
/?!exp/
当前位置后存在不匹配exp的字符, 如/a(?!\d)/
能匹配'ab',但是不能匹配'a1'。所以/?!exp$/
匹配的就是当前位置后面不以exp结束的位置。这里有一个有意思的地方,由于?!匹配的是当前位置后面的字符,那么可以想象 (?!exp)$
是等价与$
的。比如/^a$/
和/^a(?!\d)$/
都只能匹配'a'。
/?=exp/
当前位置后存在匹配exp的字符, 如/a(?=\d)/
不能能匹配'ab',但是能匹配'a1'。功能与/?!exp/
相反。所以(?=.*[0-9])
匹配的就是当前位置后面存在以数字结束的位置,也就是必须存在数字
华为笔试题 (主机名排序)
主机名由多级域名组成,自右向左,依次是顶级域名、二级域名、三级域名,例如huawei.com.cn,cn是顶级域名,com是二级域名,huawei是
三级域名。
请编写一段程序,实现主机名排序功能,排序规则以及限制条件如下:
1、主机名按照域名等级排序,即先顶级域名排序,再二级域名排序,最后是三级域名排序;
2、每一级域名排序时,参考字典顺序定义,abc 排在 abf,abc 排在 abcd 前。
3、输入的主机名确保符合以下规则
A、主机名以字符串形式给出,连续的两个主机名,以’$’符号分开;
B、主机名中仅包含小写英文字母和分隔符’.’;
C、主机名中没有连续的’.’,不以’.’开始,也不以’.’结束;
D、主机名不存在重复。
输入
输入为字符串,包含多个主机名,主机名之间以’$’符号分开。
输出
输出为经过排序后的字符串,主机名之间以’$’符号分开。
样例输入
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
}