使用for-loop:JavaScript创建动态变量名和值

使用for-loop:JavaScript创建动态变量名和值,javascript,Javascript,我有一个要动态分配给另一个值列表的值列表: var activeMachines = [41,44,46] for(i = 0; i < activeMachines.length; i++){ var temp + activeMachines[i] = document.getElementById("tempData"+activeMachines[i]); var humid + activeMachines[i] = document.getElementByI

我有一个要动态分配给另一个值列表的值列表:

var activeMachines = [41,44,46]

for(i = 0; i < activeMachines.length; i++){
    var temp + activeMachines[i] = document.getElementById("tempData"+activeMachines[i]);
    var humid + activeMachines[i] = document.getElementById("humidData"+activeMachines[i]);
    var time + activeMachines[i] = document.getElementById("timeData"+activeMachines[i]);
 }

上面的代码不起作用。我读过一些建议使用数组的帖子,但我认为我需要以某种方式动态创建一个字典,而我似乎无法获得正确的语法来实现这一点。有什么建议吗?

您可以使用
窗口
对象来执行此操作,但是,我建议您创建自己的对象,将这些“变量”作为属性存储在新的
键值
对象中

var activeMachines = [41,44,46]
var obj = {};

for(i = 0; i < activeMachines.length; i++){
    obj['temp' + activeMachines[i]] = document.getElementById("tempData"+activeMachines[i]);
    obj['humid' + activeMachines[i]] = document.getElementById("humidData"+activeMachines[i]);
    obj['time' + activeMachines[i]] = document.getElementById("timeData"+activeMachines[i]);
 }
var-activeMachines=[41,44,46]
var obj={};
对于(i=0;i
您可以使用
窗口
对象来执行此操作,但是,我建议您创建自己的对象,将这些“变量”作为属性存储在新的
键值
对象中

var activeMachines = [41,44,46]
var obj = {};

for(i = 0; i < activeMachines.length; i++){
    obj['temp' + activeMachines[i]] = document.getElementById("tempData"+activeMachines[i]);
    obj['humid' + activeMachines[i]] = document.getElementById("humidData"+activeMachines[i]);
    obj['time' + activeMachines[i]] = document.getElementById("timeData"+activeMachines[i]);
 }
var-activeMachines=[41,44,46]
var obj={};
对于(i=0;i
试试这个

var activeMachines = [41,44,46];
var output = {};

for(i = 0; i < activeMachines.length; i++){
    output["temp" + activeMachines[i]] = document.getElementById("tempData"+activeMachines[i]);
    output["humid" + activeMachines[i]] = document.getElementById("humidData"+activeMachines[i]);
    output["time" + activeMachines[i]] = document.getElementById("timeData"+activeMachines[i]);
 }

console.log(output);
var-activeMachines=[41,44,46];
var输出={};
对于(i=0;i
所有变量都在此
变量中定义。
类似于
输出['temp41']
的访问尝试以下操作

var activeMachines = [41,44,46];
var output = {};

for(i = 0; i < activeMachines.length; i++){
    output["temp" + activeMachines[i]] = document.getElementById("tempData"+activeMachines[i]);
    output["humid" + activeMachines[i]] = document.getElementById("humidData"+activeMachines[i]);
    output["time" + activeMachines[i]] = document.getElementById("timeData"+activeMachines[i]);
 }

console.log(output);
var-activeMachines=[41,44,46];
var输出={};
对于(i=0;i
所有变量都在此
变量中定义。

类似于
output['temp41']
的访问您可以使用对象并创建属性而不是变量

var context = {};
for (i = 0; i < activeMachines.length; i++) {
    context[`temp${activeMachines[i]}`] = document.getElementById("tempData"+activeMachines[i]);
}
var context={};
对于(i=0;i

使用
context.temp41
context[“temp41”]
访问这些数据,您可以使用对象并创建属性而不是变量

var context = {};
for (i = 0; i < activeMachines.length; i++) {
    context[`temp${activeMachines[i]}`] = document.getElementById("tempData"+activeMachines[i]);
}
var context={};
对于(i=0;i

当您试图动态定义变量名时,可以使用
context.temp41
context[“temp41”]
访问这些数据。这表明您应该后退一步,重新考虑数据结构。几乎总是错误的选择导致了困难、混乱的代码

在本例中,您有三个属性,分别是id和temp、湿度和时间属性。这正是对象的用途

例如,您可以将数据表示为:

let data = { machine_41: {temp: 40, humid: 10, time: 200},
             machine_44: {temp: 30, humid: 15, time: 500},
           } // etc
现在,您的所有数据都位于一个位置,您可以使用简单的属性访问它:

 data.machine_41.temp 
使用
reduce()
,从数字数组转到此对象非常简单:

var-activeMachines=[41,44,46]
让data=activeMachines.reduce((obj,machineID)=>{
//一些假数据
temp=20//或document.getElementById等。。
湿度=10
时间=600
obj['machine_u'+machineID]={温度、湿度、时间}
返回obj
}, {})
console.log(“machine\u 41湿度:”,data.machine\u 41.湿度)

console.log(data)
任何时候,当您试图动态定义变量名时,这都表明您应该后退一步,重新考虑您的数据结构。几乎总是错误的选择导致了困难、混乱的代码

在本例中,您有三个属性,分别是id和temp、湿度和时间属性。这正是对象的用途

例如,您可以将数据表示为:

let data = { machine_41: {temp: 40, humid: 10, time: 200},
             machine_44: {temp: 30, humid: 15, time: 500},
           } // etc
现在,您的所有数据都位于一个位置,您可以使用简单的属性访问它:

 data.machine_41.temp 
使用
reduce()
,从数字数组转到此对象非常简单:

var-activeMachines=[41,44,46]
让data=activeMachines.reduce((obj,machineID)=>{
//一些假数据
temp=20//或document.getElementById等。。
湿度=10
时间=600
obj['machine_u'+machineID]={温度、湿度、时间}
返回obj
}, {})
console.log(“machine\u 41湿度:”,data.machine\u 41.湿度)

log(data)
我建议创建三个数组,并将值存储在其中。然后可以执行
temp[i]=…
等操作。我建议创建三个数组,并将值存储在其中。然后您可以执行
temp[i]=…
等操作。模板字符串缺失
$
模板字符串缺失
$
非常感谢Mark。你的解决方案比我所采取的方法要干净得多。你能解释一下为什么我可以为每台机器设定不同的温度、湿度、时间和数值吗?您的代码为所有机器提供相同的值。我是JavaScript新手,不完全理解您的代码。再次感谢您抽出时间来帮忙!嘿@MattG,我假设你的温度,湿度