网上的阿里二面的一道笔试题,实现destructuringArray函数,具有如下功能:

// destructuringArray( [1,[2,4],3], "[a,[b],c]" )
// result
// { a:1, b:2, c:3 }

网上查了查,代码过于复杂。
这个用解构赋值就可以了,不过要用eval

先提取出字符串中的变量,声明变量
然后解构赋值: [a,[b],c]= [1,[2,4],3]
最后返回对象。

1 function destructuringArray(ary,str){
2     var obj,tmp=str.replace(/[\[\]]/g,"");//正则去除[]
3     (0, eval)("var "+tmp+";");//定义变量,严格模式下,间接调用eval 
4     eval(str+"=ary;");//解构赋值
5     eval("obj={"+tmp+"};");
6     return obj;
7 }

不用eval的写法

1 function destructuringArray(ary,str){
2     var tmp=str.replace(/[\[\]]/g,"");//正则去除[]
3     return new Function( "var "+tmp+";"+str+"="+JSON.stringify(ary)+";return {"+tmp+"};")();
4 }
destructuringArray([1,[2,4],3], "[a,[b],c]");
{ a: 1, b: 2, c: 3 }
destructuringArray([1, [2, [4]], 3], "[a,[b,[d,e]],c]");
{ a: 1, b: 2, d: 4, e: undefined, c: 3 }
02-11 01:10