2015-12-30 2 views
-1

У меня есть массив объектов с маркером lat/lngs, и иногда адреса не геокодированы, поэтому я бы хотел пропустить lat: 0, lng: 0. Что я ' m, пытающийся выполнить сейчас, настраивает цикл так, чтобы он пересекал массив и обнаруживал первый объект, который не является нулевым.Loop через массив объектов, пока lat/lng не равен нулю

Он не отображает карту, заявив, что она не определена.

Это то, к чему я пришел.

var Points = [{ 
    lat: 0, 
    lng: 0 
}, { 
    lat: 42, 
    lng: -72 
}, { 
    lat: 41, 
    lng: -73 
}]; 

function initMap() 
{ 
    for (var i = 0; i < Points.length; i++) 
    { 
     if (Points[i].lat * Points[i].lng != 0) 
     { 
      map = new google.maps.Map(document.getElementById('map'), 
      { 
       center: new google.maps.LatLng(Points[i].lat, Points[i].lng), 
       zoom: 10, 
       scaleControl: true 
      }) 
      break; 
     } 
     else 
     { 
      continue; 
     } 
    } 
} 
+0

Это странно, но независимо от того, я хотел бы выяснить способ, чтобы заставить его пропустить 0, 0 –

+0

@ Mr.Smithyyy Я пытался ваш код, и он работает хорошо, поэтому я не знаю, с какой неопределенной ошибкой вы сталкиваетесь. – goblin

+0

вы можете использовать метод array.filter, если хотите проверить записи массива – maioman

ответ

1

Использование array.filter:

var Points = [{ 
 
    lat: 0, 
 
    lng: 0 
 
}, { 
 
    lat: 42, 
 
    lng: -72 
 
}, { 
 
    lat: 41, 
 
    lng: -73 
 
}]; 
 

 
/** 
 
Given an object with `lat` and `lng` properties, return true if both `lat` and `lng` !== 0 
 
    
 
- parameter p: the Point to test 
 
    
 
- return: Bool true if both `lat` and `lng` !== 0 
 
*/ 
 
function pointIsNonZero(p) { 
 
    return p.lat !== 0 && p.lng !== 0; 
 
} 
 

 
console.log(Points.filter(pointIsNonZero));