JavaScript - 从外部检索for循环内生成的变量值

时间:2016-03-21 18:53:35

标签: javascript json

好吧,我正在使用一个从同一个数据库中获取信息的rest API,但有两个不同的表:

表#1包含(输出包含以下对象的JSON结果):

id
名称
类型

表#2包含(输出包含以下对象的JSON结果):

ID
价值(实时,定期更新)

我想要做的是比较表#1中的 id 并将其与 id 进行比较 在表#2中,如果两个id的输出之间存在匹配,则表#2中的(值)与所有具有相同id的值之和。

到目前为止,我能够做到以下几点:

File1.js

    require('File2.js');

    for (a in metricsData){
    var metricsID =  metricsData[a].id;
    }

    /* Certainly the below code is not working, but I don't know if it should
    be done this way or it can be much more better.

    Can't get the values of both metricsID & idFromLoad

    if(metricsID === idFromLoad)  {
     var sum += value;
     console.log('The new sum is : '+sum)
    } */

File2.js

for(var i in load.updates){
    var idFromLoad =     load.updates[i].id;
    var newVal = load.updates[i].value;
}

所以,最大的问题是如何获得 metricsID 和&的价值。 for循环之外的 idFromLoad ?有没有更好的方法来实现我想要做的事情?

1 个答案:

答案 0 :(得分:0)

你想要完成的事情有点令人困惑,但要回答这篇文章标题中描述的问题......

因为你在循环中定义了变量,所以它只存在于循环中。如果你想“记住”循环之外的值,你需要在外面定义它:

var metricsID;
for (a in metricsData){
    metricsID =  metricsData[a].id;
}

但请注意,在循环外,它的值将等于循环中最后一项的id。

如果您正在寻找一种在两个表中查找值的简单方法,您可以做的就是遍历每个表并创建一个键入id的映射,以便您可以根据id轻松检索值。 / p>

var updatesMap = {};

for(var i in load.updates){
    var idFromLoad =     load.updates[i].id;
    updatesMap[idFromLoad] = load.updates[i].value;
}

然后在你的另一个循环中:

for (a in metricsData){
    var metricsID =  metricsData[a].id;
    var updateValue = updatesMap[meticsID]; //this is the value from the other table
}