我敢肯定有一个简单的方法可以做到这一点,但现在已经很困难了。
我在脚本的顶部定义了许多变量(这是两个示例):
var firstVar,secondVar;
然后我有一个包含这些变量的对象:
var myObj = { a: {name:firstVar, number:1}, b: {name:secondVar, number:2}
我想为这些变量赋值:
keys = Object.keys(myObj);
function getAll(e){
var myArray = [];
for (var prop in myObj){
myArray.push(myObj.prop[e]);
}
return myArray;
}
我想要的行为是:
var nameVars = getAll(name);
// [firstVar,secondVar]
但是它返回:
// [undefined,undefined]
在定义变量之前我还能如何获得变量?
最佳答案
然后我有一个包含这些变量的对象:
不,不是。它包含值的副本,这些值包含创建对象时所包含的变量(为undefined
,因为您从未为其分配值)。创建后,将值复制到的对象属性与变量之间没有持续的链接。
由于对象没有与变量的持久链接,因此getAll
无法返回您所说的所需信息。
您在评论中说过,您正在构建d3图,并具有与某些变量相同的结构,并希望避免重复自己。在我看来,您想要一个构建器功能:
function buildObject(firstVar, secondVar) {
return { a: {name:firstVar, number:1}, b: {name:secondVar, number:2} };
}
...您将这样使用:
var obj1 = buildObject("value1", "value2");
// do a graph
var obj2 = buildObject("valueA", "valueB");
// do a graph
...甚至可能只是一些变量而产生图的东西:
function makeGraph(firstVar, secondVar) {
buildTheGraph({ a: {name:firstVar, number:1}, b: {name:secondVar, number:2} });
}
我不认为是这样,但是如果它是您想要的名称,只需将它们放在引号中(并且
myArray.push(myObj.prop[e]);
应该是myArray.push(myObj[prop][e]);
和getAll(name)
应该是getAll("name")
),但是同样没有指向变量:// Since they're not used, we don't even need these: var firstVar, secondVar;
var myObj = { a: { name: "firstVar", number: 1 }, b: { name: "secondVar", number: 2 } };
function getAll(e) {
var myArray = [];
for (var prop in myObj) {
myArray.push(myObj[prop][e]);
}
return myArray;
}
var nameVars = getAll("name");
console.log(nameVars);
...但是请注意,拥有名称并不能帮助您以后获取变量值(除非您使用
eval
,应尽量避免使用)。关于javascript - 动态将值分配给 undefined variable ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38812891/