我目前正在运行一系列函数,其中第一个参数是在别处定义的变量,第二个参数是恰好与变量名相同的字符串:
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... })
这实际上可行吗?
答案 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]); });
答案 4 :(得分:-2)
您可以使用数据创建对象,迭代键,并将键值对传递给assignString函数。
var data = {
Hello: Hello,
World: World,
Foo: Foo,
Bar: Bar
}
Object.keys(data).forEach(key => assignString(data[key], key));