2017-05-25 111 views
0

我有变量,例如app.figures.data[0].user.x0,app.figures.data[0].user.y1app.figures.data[0].user.d2。这些变量被赋值。从动态变量中获取值

这些变量有一个动态数字,按照递增变量中的最终数字的顺序(即:app.figures.data[0].user.d2之后的下一个变量为app.figures.data[0].user.x3)。

我想确定一种有效的方法来获取每个变量的值动态地在循环中。

for(j = 0; j < len; j++){ 


      var x = 'x' + j; 
      j++; 

      var y = 'y' + j; 
      j++; 

      var d = 'd' + j; 

      var dresult = app.figures.data[0].user.d; 
} 

我需要的dresult的价值,因为它是app.figures.data[0].user.d2。例如,app.figures.data[0].user.d223,因此dresult在该迭代中应该是23

我是JS的新手,所以有任何建议。

+0

为什么你需要从_inside_循环中增加'j'?另外,请发布整个代码,包括HTML。 – doutriforce

+0

'app.figures.data [0] .user''对象'你不能简单地使用'Object.keys'吗? – Diego

+0

@doutriforce因为我需要'app.figures.data [0] .user.x','app.figures.data [0] .user.y'和'app.figures.data [0] .user。 d'一次使用。 – John

回答

1

[]运营商会为您工作吗?

for (let j = 2; j < len; j += 3) { 
    let dresult = app.figures.data[0].user['d' + j]; 
} 
+0

?没有d0。 – vabii

+0

是的,你是完全正确的。我编辑了答案。 – PeterMader

0
var values=["x0","y1","d2"]. map(el=>this[el],app.figures.data[0].user); 

它将映射键相应的值。 可以把在一个循环:

for(var i=0; i<100;i+=3){ 
     var values=["x","y","d"]. map((el,id)=>this[el+(i+id)],app.figures.data[0].user); 

    values.forEach(console.log);//just an example case 
} 

几点说明:i为计数器,由3递增,停止在102 EL是一个数组元素,所以“Y”,和id是,所述索引阵列。这是用户对象。所以这[el +(i + id)]得到这个对象属性的值。

顺便说一下动态变量名称真的很糟糕的风格,会造成很多错误。如果没有它,可能会改变你的代码。