JavaScript:Stringify实际变量名称

时间:2016-03-06 20:15:42

标签: javascript

我目前正在运行一系列函数,其中第一个参数是在别处定义的变量,第二个参数是恰好与变量名相同的字符串:

assignString(Hello, 'Hello')
assignString(World, 'World')
assignString(Foo, 'Foo')
assignString(Bar, 'Bar')
...

理想情况下,我想将此简化为:

['Hello', 'World', 'Foo', 'Bar'].forEach(() => { assignString... })

or

[Hello, World, Foo, Bar].forEach(() => { assignString... })

这实际上可行吗?

5 个答案:

答案 0 :(得分:1)

composer validate

答案 1 :(得分:0)

我认为基于字符串值动态创建变量的唯一方法是执行以下操作:

source deactivate

老实说,我不能说我可以设想一个用例,这是一个很好的做法,但我不知道你的用例,所以这里没有判断:)

我还想指出这个小图书馆,我发现它对于创建密钥与密钥名称具有相同值的对象非常有用:https://github.com/STRML/keyMirror。我发现在React社区中使用得相当多。

答案 2 :(得分:0)

由于变量名称和字符串等效,因此无需将其传递两次。我宁可传入变量的范围。你可以这样做,所以它适用于你所处的任何范围:

function assignString(scope, val){
    scope[val] = val;
}

被称为

assignString(window, "Hello");

console.log(Hello) ==> "Hello"

的输出

答案 3 :(得分:-1)

使用新的ES6 Map对象,我们可以在结构中创建名称/值对,然后可以将其转换为数组,因此forEach可以工作:

  // Variables that assignString will need:
  var Hello = "var1", World = "var2", Foo = "var3", Bar = "var4";

  // Map object that contains name of variables and strings that match variable name
  var m = new Map([[Hello, "Hello"],[World,"World"],[Foo, "Foo"], [Bar, "Bar"]]);

  // Turn Map into Array so forEach will work:
  var a = Array.from(m);

  // Call forEach which calls assingString and passes key name
  // (variable name) and string value
  a.forEach((value) =>  { assignString(value[0], value[1]); });

看到这个小提琴:https://jsfiddle.net/qnwsajes/34/

答案 4 :(得分:-2)

您可以使用数据创建对象,迭代键,并将键值对传递给assignString函数。

var data = {
    Hello: Hello,
    World: World,
    Foo: Foo,
    Bar: Bar
}

Object.keys(data).forEach(key => assignString(data[key], key));