为未定义的变量动态赋值
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
,否则应尽量避免使用(。
相关文章:
- Javascript变量赋值|
- 无法为打字稿字典赋值
- HTML范围:动态设置值属性
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- 如何在另一个java脚本函数中访问java脚本中动态html表中单元格的动态赋值
- 在 Google Apps 脚本中动态定义变量名称和赋值
- 在 $.post - JQuery 中创建动态变量赋值
- 为html中动态生成的行赋值
- 如何在对象文字赋值中指定动态值
- 如何使用react native动态赋值给TextInput
- 给对象赋值.变量动态形成
- Angularjs如何给动态文本域赋值
- 在AJAX js调用中动态赋值
- 动态赋值给dom
- 将php函数赋值给动态创建的对象
- 将c#中动态函数调用的结果赋值给变量
- 为未定义的变量动态赋值
- ES6解构,动态赋值
- 在jQuery中使用动态id为隐藏字段赋值
- 使用动态命名赋值动态创建的Jquery选项卡