![](/img/trans.png)
[英]Angular2/Javascript - Retrieve the new value of the variable that was generated inside a for loop
[英]JavaScript - Retrieve variable value generated inside the for loop, externally
好吧,我正在使用一个REST API,该API从相同的数据库但从两个不同的表中获取信息:
表#1包含(输出包含以下对象的JSON结果):
ID
名称
类型
表#2包含(输出包含以下对象的JSON结果):
ID
值(实时,定期更新)
我想做的是比较表#1中的ID并将其与表#2中的ID进行比较,如果两个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;
}
因此,最大的问题是如何在for循环之外获取metricsID和idFromLoad的值? 有没有更好的方法来实现我要完成的任务?
您要完成的工作有点令人困惑,但要回答本文标题中所述的问题...
因为您在循环内定义了变量,所以它仅存在于循环内。 如果要“记住”循环外的值,则需要在循环外定义它:
var metricsID;
for (a in metricsData){
metricsID = metricsData[a].id;
}
但是请注意,在循环之外,它的值将等于循环中最后一项的ID。
如果您正在寻找一种在两个表中查找值的简便方法,您可以做的是遍历每个表一次并创建一个以id为键的映射,以便您可以轻松地基于id检索值。
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.