2016-07-17 28 views
0

我正面臨一些愚蠢的問題,我知道我錯過了一些東西。簡單數組長度 - 總是0即使內容存在

我有一個空白數組,其中我使用.push()方法推動的東西。

現在當我打印完整的數組時,我得到了值,但是當我使用array.length時,它總是爲零。我知道這是我很想念的東西,非常愚蠢。

var markersToPush = []; 

for (var i = 0; i < contactList.length; i++) { 
    console.log('conatcat addres', contactList[i].MailingStreet); 
    geocoder.geocode({ 
     'address': contactList[i].MailingStreet 
    }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 
      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 
      markersToPush.push(marker.getPosition()); 
     } else { 
      alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
} 
console.log('markers to push-->', markersToPush); 
console.log('markers length-->', markersToPush.length); 

對於結果的日誌 -

enter image description here

我已經檢查等相互關聯的問題 -

  1. Javascript array returns length as 0 always even there are elements in it
  2. Javascript array returns length as 0 always even there are elements in it
  3. Array Length returns 0
+1

請將您的代碼*在這裏* – Li357

+0

添加相關代碼部分 –

+4

請將代碼作爲文本發佈,而不是代碼圖片。無論如何,我想你會發現在你登錄的時候數組是空的,但是當你在控制檯中展開數據時,它會有數據。 (如果你記錄'JSON.stringify(markersToPush)',它會確認它)。你正在調用一個異步函數'geocoder.geocode()',並且你傳遞給它的回調函數將不會被數據調用在循環結束後並在'console.log()'語句之後。看到[這個問題](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)。 – nnnnnn

回答

0

@nnnnnn在他的評論中很可能是正確的。看起來您正在對geocoder.geocode()進行異步調用。你應該嘗試做的回調函數內的控制檯日誌:

var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 
      markersToPush.push(marker.getPosition()); 

      // log the length value here 
      console.log('markers length-->', markersToPush.length); 
     } else { 

你看到陣列(10)當您登錄對象的原因是瀏覽器更新緩存。您可以嘗試使用slice()與您現有的代碼,迫使這個控制檯是這樣的:

console.log('markers length-->', markersToPush.slice().length);

這將創建一個新的陣列和測量長度。但是,真的,你應該在異步回調函數中完成所有工作。

+0

「您嘗試在回調函數內執行您的控制檯日誌」。它是外部 –

+0

讓我嘗試裏面的異步電話 –

+0

@KaushikRay,但你需要得到長度 – charlietfl