0

我正在尝试将两个对象数组合并为一个,这在应用程序中更有意义(google maps api v3)。我收到obj2 is undefined错误。据我了解,它与上下文相关——我在 forEach 循环中调用了一个函数,它无法访问“上”循环中的对象。如何传递上下文或重新定义这些循环以使其工作?nodesgeneration包含对象列表。这些对象是简单的键值集。

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);
              }
        }
4

1 回答 1

1

从它的外观来看,您的代码正在达到这一部分:

    else
    {
       timentries.push(obj2)
       currentDate = value2.datetime;
       delete obj2;
       var obj2 =
       {
          time: currentDate,
          technologies :[]
       }

    }

请注意,您正在删除 obj2 并在“else”块的本地范围内重新声明 obj2。没有必要删除它(这实际上不会对变量产生影响)并重新声明它。而不是这些行,只需执行以下操作:

    else
    {
       timentries.push(obj2)
       currentDate = value2.datetime;
       obj2 =
       {
          time: currentDate,
          technologies :[]
       };
    }
于 2013-11-02T01:44:59.610 回答