2016-09-06 4 views
-2

非常に単純に、スクリプトの長い部分に多次元配列を構築しました。最後に、各レベルをループして何かをしたいのです。私はコンソールに配列をログアウトしている必要がありますようにすべてを見ることができますが、コンソールは、配列の長さは0と私は.lengthそれはまた、私のJQueryは、焼成する。私はそれがこのように振舞うようにするために何ができるのか理解できません。私は絶対に困惑している!配列/オブジェクトはそんなにスクリプトとAJAXの上に構築されているものののみカウントビットに置くために、私が試したことを呼び出して、ここで enter image description here空でない配列を空として扱うJQuery?

jQueryのです...:

この

はコンソールです

var field_layers = []; 

function blah_blah() { 
    do_api_call("api_call_url_here") 
     .done(function(response, textStatus, xhr) { 
      var map_layers = response; 
      $(map_layers).each(function(map_layers_key, map_layers_detail) { 
       var datalayer_id = map_layers_detail.Layer.DataLayerId; 

       // add field ids to array: 
       field_layers["field_id_"+map_layers_detail.Layer.FieldId] = []; 
       do_api_call("api_call_url_here/"+datalayer_id) 
        .done(function(response, textStatus, xhr) { 
         // create an empty array for field layers: 
         field_layers["field_id_"+map_layers_detail.Layer.FieldId]["layer_id_"+datalayer_id] = []; 
         var map_layer_zones = response; 
         $(map_layer_zones).each(function(map_layer_zone_key, map_layer_zone_detail) { 
          // Add the zones to the layer 
          field_layers["field_id_"+map_layers_detail.Layer.FieldId]["layer_id_"+datalayer_id].push({ 
           "zone_id":zone.DataLayerZoneId, 
           "title":zone.DataLayerZoneId+" title here" 
          }); 
         }); 
        }); 
      }); 
     }); 
} 

function go_to_field(field_id) { // this is what gives me the console screenshot 
    console.log("field_id: "+field_id); 
    console.log(field_layers["field_id_"+field_id]); 
    console.log(field_layers["field_id_"+field_id].length); 
} 
+0

関連するjqueryを投稿してください。 – Santi

+2

配列をオブジェクトのように使用しているように見えますが、配列のように動作することを期待しています。これはおそらくjqueryとは関係ありません。 –

+0

@TylerRoper私はそれがとても長くて引き出されますが、それはコンソールでうまくログアウトしていると考えると、役に立たないと思っていました。ちょっと待って。 –

答えて

1

オブジェクトの代わりに、配列であるためにあなたのfield_layers = []を変更してみてください:field_layers = {}。空の配列を初期化する各場所を空のオブジェクトを初期化するように変更すると、コードはそのまま動作するはずです。

大括弧と中括弧の違いに注目してください。

PHPのバックグラウンドを利用している場合、JavaScriptのオブジェクト({})をPHPの結合(または名前付き)配列として考えることができます。

だから、最終的なコードは次のようになります。

var field_layers = {}; 

function blah_blah() { 
    do_api_call("api_call_url_here") 
     .done(function(response, textStatus, xhr) { 
      var map_layers = response; 
      $(map_layers).each(function(map_layers_key, map_layers_detail) { 
       var datalayer_id = map_layers_detail.Layer.DataLayerId; 

       // add field ids to object: 
       field_layers["field_id_"+map_layers_detail.Layer.FieldId] = {}; 
       do_api_call("api_call_url_here/"+datalayer_id) 
        .done(function(response, textStatus, xhr) { 
        var map_layer_zones = response; 
        $(map_layer_zones).each(function(map_layer_zone_key, map_layer_zone_detail) { 
         // Add the zones to the layer 
         field_layers["field_id_"+map_layers_detail.Layer.FieldId]["layer_id_"+datalayer_id] = { 
          "zone_id":zone.DataLayerZoneId, 
          "title":zone.DataLayerZoneId+" title here" 
         }; // notice the assignment of object literal here 
        }); 
       }); 
     }); 
    }); 
} 

function go_to_field(field_id) { // this is what gives me the console screenshot 
    console.log("field_id: "+field_id); 
    console.log(field_layers["field_id_"+field_id]); 
    console.log(field_layers["field_id_"+field_id].length); 
} 

私はこれをテストしていませんが、私はそれが動作するはずだと思います。

+0

パーフェクト。本当にありがとうございました...それは簡単だとは信じられません! –

+0

喜んで助けてください!あなたは以前見たことがなかったJavascriptを壊す興味深い方法を見つけました!配列はサイズのない一般的なコレクションのように動作していました。あなたはJavascript上の最終的なプライマーのためにDouglas Crockfordによる 'Javascript:The Good Parts'をチェックしてください。 – daniel0mullins

+1

私はします。ヒントをありがとう! –

関連する問題