文字列を変数名に変換するいくつかの方法
2607 ワード
参考:https://segmentfault.com/a/1190000017114522
最初の面接問題:get関数を実現し、次の呼び出しが正しい結果を出力できるようにします.
obj.selector.to.toutiao,obj.target[0],obj.target[2].nameは'FE Coder'として出力できますので、1,'byted'ではobj.'selector.to.toutiao',obj.‘target[0],obj.‘target’は出力できますか?明らかにできない
だから、私たちは’selector.to.toutiao’をObj.selector.to.toutiaoに転化すれば完璧に解決できます.
文字列を変数名に変換する方法:方法1:eval関数を使用する 1.定義:eval()関数は、ある文字列を計算し、JavaScriptコードを実行します.(w 3 c解釈:http://www.w3school.com.cn/jsref/jsref_eval.asp)2.用法:eval(「2+2」)は、4を返します.ps:元の文字列だけをパラメータとして受け入れるということです.方法2:テンプレート文字列` を使用する.
1.説明:(参考http://es6.ruanyifeng.com/?search=new+function&x=9&y=10菗docs/string)テンプレート文字列に変数を埋め込むには、変数名を${}に書く必要があります.
2.テンプレート文字列を使った問題解決方法
最も重要な総括
変数名と文字列があり、変数名になりたい場合は、まず文字列に変換します.
白さんは総括の正しいかどうか分かりません.今の経験でまとめて、いつでも更新します.
最初の面接問題:get関数を実現し、次の呼び出しが正しい結果を出力できるようにします.
const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name');
// [ 'FE Coder', 1, 'byted']
簡単に言えば、文字列を変数名に変換するテーマです.obj.selector.to.toutiao,obj.target[0],obj.target[2].nameは'FE Coder'として出力できますので、1,'byted'ではobj.'selector.to.toutiao',obj.‘target[0],obj.‘target’は出力できますか?明らかにできない
だから、私たちは’selector.to.toutiao’をObj.selector.to.toutiaoに転化すれば完璧に解決できます.
文字列を変数名に変換する方法:
var xy=4;
console.log(eval(x+"y"));
エラーを出すことができます.eval(「xy」)ではなく、eval()を使って問題を解く方法です.const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
// [ 'FE Coder', 1, 'byted']
//get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name');
function get(obj,x,y,z){
//
x=(eval("obj."+x));
y=(eval("obj."+y));
z=(eval("obj."+z));
console.log(x,y,z);
}
get(obj,'selector.to.toutiao','target[0]','target[2].name')
1.説明:(参考http://es6.ruanyifeng.com/?search=new+function&x=9&y=10菗docs/string)テンプレート文字列に変数を埋め込むには、変数名を${}に書く必要があります.
2.テンプレート文字列を使った問題解決方法
function get(data, ...args) {
const res = JSON.stringify(data);
return args.map((item) => (new Function(`try {return ${res}.${item} } catch(e) {}`))());
}
const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
console.log(get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name', 'asd'));
その他の説明:(1)get(…args):…argsは残りのパラメータ文法であり、一定数のパラメータを一つの配列として表すことができます.(2)JSON.strigify:JSON.strigify()方法は、JavaScript値をJSON文字列に変換するために用いられる.(3)Aray map():メソッドは、元の配列要素の順に要素を処理した後、新しい配列参照を返します.http://www.runoob.com/jsref/jsref-map.html)(4)new Function():(a)new function(arg 1,arg 2,…,argN,functionybaody)のパラメータは必ず文字列(b).new Function()が戻り値を対象とし,function(){)は、関数の値を返します.(newが返されるのは、オブジェクト、newが返されない関数の値(元の開始タイプまたはオブジェクト)です.最も重要な総括
変数名と文字列があり、変数名になりたい場合は、まず文字列に変換します.
白さんは総括の正しいかどうか分かりません.今の経験でまとめて、いつでも更新します.