网上的阿里二面的一道笔试题,实现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 }