0

オブジェクトの 2 つの配列を、アプリケーションでより意味のある 1 つにマージしようとしています (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);
              }
        }
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 に答える