周末去一家公司面试,面试官给出了几道题。如下:
1:
url解析
考虑用 字符串的split方法。
代码如下:
url切割
输入: http://www.baidu.com?a=1&b=2
输出: {a:1,b:2}
直接切割
function getPara(url){
var temp = {};
var res = url.split('?')[1];
var paras = res.split('&');
for(var i=0;i<paras.length;i++){
var currRs = paras[i].split('=');
var key = currRs[0];
var value = currRs[1];
temp[key]= value;
}
return temp ;
}
2: 关键词替换
var desc = 'this is {name} , {age}';
var man = {name:'lwyue',age:13};
代码如下:
function replaceKeyByObj(a ,b){
var startSearch = 0 ; //起始搜索位置
var start =0,end=0;//起始位置
var lastRs = '';
while(startSearch<b.length){
start = b.indexOf('{',startSearch) ,
end =b.indexOf('}',startSearch) ;//结束搜索位置
if(start!=-1 && end!=-1){
lastRs += b.substring(startSearch,start)
var key = b.substring(start+1,end);
if(a[key]){
lastRs +=a[key];
} else{
lastRs +='{'+key+'}';
}
startSearch = end+1 ;
}else {
lastRs += b.substring(startSearch);
startSearch = b.length;
} ;
}
return lastRs ;
}
3: 数组去重
1:两遍遍历的方法
Array.prototype.stripe = function(){
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;j++){
if(this[i]===this[j]){
this.splice(j,1);
j--;
}
}
}
}
2:转换为对象,用时间复杂度为o(n)时间处理,但是由于 js对象的toString方法,为[object object],导致对象均无法分辨, 此方法对对象无效。
主要是将值变为对象的索引。value-> key值的一次转换。
Array.prototype.stripe = function(){
var temp = {};//创建临时对象
for(var i=0;i<this.length;i++){
if(!temp[this[i]+0]){
temp[this[i]+0] = true;//标记
}else {
this.splice(i,1);
i--;
}
}
}
有局限性 ,只能处理基本类型,对对象类型无能为力。