網上的阿里二面的一道筆試題,實現destructuringArray函數,具備以下功能:函數
// destructuringArray( [1,[2,4],3], "[a,[b],c]" ) // result // { a:1, b:2, c:3 }
網上查了查,代碼過於複雜。
這個用解構賦值就能夠了,不過要用evalspa
先提取出字符串中的變量,聲明變量
而後解構賦值: [a,[b],c]= [1,[2,4],3]
最後返回對象。code
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 }