【发布时间】:2013-11-02 01:27:20
【问题描述】:
我正在尝试将两个对象数组合并为一个,这在应用程序中更有意义(google maps api v3)。我收到obj2 is undefined 错误。据我了解,它与上下文有关-我在 forEach 循环中调用了一个函数,并且它无法访问“上部”循环中的对象。如何传递上下文或重新定义这些循环以使其工作? nodes 和 generation 包含对象列表。这些对象是简单的键值集。
database = new Array;
function processData(nodes,generation) {
nodes.forEach(function(value)
{
var obj = {
lat : value.Latitude,
lng : value.Longitude,
data : {ID: value.Node,
timentries : []}
}
currentDate = generation[0].datetime;
var obj2 =
{
time: currentDate,
technologies :[]
}
generation.forEach(function(value2)
{
if (value2.datetime == currentDate)
{
if (value2.node == obj.data.ID)
{
var obj3 = {
type : value2.technology,
output : value2["output"],
emission : value2["emissions"]
}
obj2.technologies.push(obj3);
}
}
else
{
timentries.push(obj2)
currentDate = value2.datetime;
delete obj2;
var obj2 =
{
time: currentDate,
technologies :[]
}
}
})
database.push(obj)
})
};
$( document ).ready(function() {
loadData(processData);
});
第一次引用obj2时出现错误:
if (value2.datetime == currentDate)
{
if (value2.node == obj.data.ID)
{
var obj3 = {
type : value2.technology,
output : value2["output"],
emission : value2["emissions"]
}
obj2.technologies.push(obj3);
}
}
【问题讨论】:
-
确保它可以访问“上层”forEach 的上下文 - JavaScript 可以让你做到这一点。这不是你面临的问题。
-
如果“nodes”和“generation”是数组,为什么不使用“for(var n=0;n
-
好吧,对象在 generation.forEach(function(value2) {...} 循环中变得未定义。尽管事实上“this”值仍然相同。
-
@LucioM.Tato 我知道我可以(我稍后会尝试),但我不明白这里发生了什么,这让我感到困惑。
标签: javascript foreach