2017-10-03 26 views
1

式を評価するために動的値を使用するにはどうすればよいですか?たとえば、以下の例を考えてみましょう。Javascriptの動的式にテンプレートリテラルを使用する

var a = 5; 
var b = 10; 
console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`); 

もし、aとbが動的な名前の場合はどうなりますか?は、aとbの代わりに、 'someValue'のようなものにすることができます。下のようなやり方は? (名前は動的にすることができます)

var 'someValue' = 1; 
console.log(`*Fifteen is ${'someValue' + b}* and not ${2 * a + b}.`); 

簡単に言えば、フィールド名が動的な式を評価したいと思っています。だから私は静的に変数を定義することはできません。どのように私はこれを克服するのですか?

+0

あなたは、 "フィールド名" とはどういう意味ですか? – guest271314

+0

あなたが 'console.log(' * Fifteen is $ {someValue} $ {b} *を試してみましたが、$ {2 * a + b} 'ではありません。 –

+0

名前= 'a'、 'b'は何でもかまいません..静的にsomeValueを定義することはできません – Vicky

答えて

3

ウィンドウオブジェクトへの参照であるbracket表記とthisキーワードを使用できます。あなたのニーズに合った意志

window.name="Vicky"; 
 
window.test="test"; 
 
const message = (p0, p1) => `Hello, ${p0}. This is a ${p1}`; 
 
console.log(message(window['name'],window['test']));

+0

私はおおよそ次のようなものを探しています。式eval ..を試してみましょう – Vicky

+0

関数内では機能しません。 –

+0

関数では動作しません:( – Vicky

1

たぶんeval。しかし、この機能を持つcarefulになります。

function test() { 
 
    var a = 'Hello World', 
 
     b = 1, 
 
     c = 2, 
 
     myVarRefA = 'a', 
 
     myVarRefB = 'b', 
 
     myVarRefC = 'c'; 
 
    
 
    console.log(`${eval(myVarRefA)} ${eval(myVarRefB + ' + ' + myVarRefC)}`); 
 
} 
 

 
test();

+0

このスニペットはうまくいきます:)私はこのコードを私のニーズに合わせてモジュール化しようとします。私はこれがうまくいくことを願っています – Vicky

+0

@Vicky、あなたは私のコメントを試みましたか? –

+0

@ Alexandru-IonutMihaiいいえ私はそれを試してみました – Vicky

0

に注意してくださいあなたは

let temp = Object.create(null); 
temp["someVar"] =3; 
temp["anotherVar"]=2; 
console.log(temp["someVar"] + temp["anotherVar"]); 

その属性として変数を一時的なオブジェクトを使用することができますしかし、あなたはまた、よりエレガント

let temp = Object.create(null); 
temp.someVar =3; 
temp.anotherVar=2; 
console.log(temp.someVar+ temp.anotherVar); 

を使用することができますあなたの "this"束縛

+0

ウィンドウオブジェクトを使用するとグローバルスコープに変数がリークします –

0

フィールド名が完全にカスタムの場合は、Object.keys(..)を使用できます。このメソッドを使用すると、オブジェクト内のプロパティをループすることができます。

Object.keys()メソッドは、ループ内のために... (差があることによって提供されるものと同じ順序で、指定されたオブジェクト自身 列挙プロパティの配列を返すために、そのループはプロトタイプチェーンの プロパティも列挙します)。

(ただ、使用方法を示すため)

const customObject = { name: 'Foo', age: 23, city: 'Bar City' }; 
 
    const getFormatedObject = (fieldsObject) => { 
 
     const fields = {}; 
 
     Object.keys(fieldsObject).forEach((fieldName, index) => { 
 
     fields[`f${index}`] = fieldsObject[fieldName]; 
 
     }); 
 
     return fields; 
 
    } 
 
    const formatedObject = getFormatedObject(customObject); 
 
    for (let i = 0; i < Object.keys(formatedObject).length; i++) { 
 
     console.log(formatedObject[`f${i}`]); 
 
    }

あなたは以下のようなもので行くことができますあなたのオブジェクトのフィールドの数を知っている場合。

const customObject = { name: 'Foo', age: 23, city: 'Bar City' }; 
 
const keys = Object.keys(customObject); 
 
console.log(`His ${keys[0]} is ${customObject[keys[0]]} and ${keys[1]} is ${customObject[keys[1]]} and ${keys[2]} is ${customObject[keys[2]]}`);

関連する問題