繁体   English   中英

动态将值分配给未定义的变量

[英]Dynamically assign value to undefined variable

我敢肯定有一个简单的方法可以做到这一点,但现在已经很困难了。

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

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 ,否则应避免使用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM