1.JS实现select()函数,达到以下效果
var obj={
x:{
xx:{
xxx:{
xxxx:1
}
}
}
}
obj.select('x.xx.xxx.xxxx');//输出1
obj.select('x.xx.xxxx');//undefined
obj.select('x').select('xx.xxx');//输出{xxxx:1}
思路:将参数分割为数组,以obj[arr[i]]的形式调用
方法一和方法二基本差不多,都是牛客大佬分享的
//方法一
var obj={
x:{
xx:{
xxx:{
xxxx:1
}
}
}
};
Object.prototype.select=function (str) {
var arr=str.split('.');
var result;
for(var i=0;i<arr.length;i++){
if(i===0){
result=this[arr[i]];
console.log(this);
} else{
result=result[arr[i]];
}
}
return result;
};
console.log(obj.select('x.xx.xxxx'));//undefined
console.log(obj.select('x.xx.xxx.xxxx'));//1
console.log(obj.select('x').select('xx.xxx'));//{ xxxx:1 }
//方法二
var obj={
x:{
xx:{
xxx:{
xxxx:1
}
}
}
};
Object.prototype.select=function () {
var args=arguments[0].split(".");
var res=this;
for(var i=0;i<args.length;i++){
if(!res){
return;
}
res=res[args[i]];
}
return res;
};
console.log(obj.select('x.xx.xxxx'));//undefined
console.log(obj.select('x.xx.xxx.xxxx'));//1
console.log(obj.select('x').select('xx.xxx'));//{ xxxx:1 }
2.JS将绝对路径简化
path ="/a/./b/../../c/", =>"/c"
path="/User/./frank/../../Codes"=>"/Codes"
思路:将字符串转化为数组split()
,注意,字符串转为数组的第一位是""
循环遍历数组,将非"."
、".."
、""
的数据放入一个新数组中,遍历到".."
时,删除数组末尾元素,继续遍历。最后将数组转为字符串打印输出(字符串前需要加"/")
function simplifyPath(path) {
var arr=path.split("/");
var arr1=[];
if(path==""||path.length==0){
return path;
}
for(var i=0;i<arr.length;i++){
if(arr[i]!="."&&arr[i]!=".."&&arr[i]!=""){
arr1.push(arr[i]);
}
if(arr[i]==".."){
arr1.pop();
}
}
arr1=arr1.join("/");
arr1="/"+arr1;
return arr1;
}
console.log(simplifyPath("/User/./frank/../../Codes"));// 输出/Codes