动态地将值赋给未定义的变量

时间:2016-08-07 09:46:56

标签: javascript

我确信有一种简单的方法可以做到这一点,但现在我很难过。

我在脚本的顶部定义了许多变量(这是两个例子):

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] 

如何在定义变量之前获取变量?

1 个答案:

答案 0 :(得分:2)

  

然后我有一个包含这些变量的对象:

不,它没有。它包含副本,这些变量包含在您创建对象时(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]);也应该是{{1} }}和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);,您应该设法避免使用这些值。)