2017-02-07 2 views
1

Привет. Мне нужна помощь с этим фрагментом кода. Результат, который я получаю, - это несколько разных объектов данных JSON. Но я хочу извлечь данные назначения, а затем объединить их как массив. Но все данные, которые я получаю, - это только одно объединение данных как массив, один за другим. Вот результат: enter image description hereКак слить два разных объекта из данных JSON

$scope.findHospital = function(){ 

    $ionicLoading.show({ 
     template: '<ion-spinner icon="bubbles"></ion-spinner><br/>Acquiring location!' 
    }); 

    var posOptions = { 
     enableHighAccuracy: true, 
     timeout: 20000, 
     maximumAge: 0 
    }; 

    $cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) { 
     var lat = position.coords.latitude; 
     var long = position.coords.longitude; 
     var infowindow; 

     var myLatlng = new google.maps.LatLng(lat, long); 

     var mapOptions = { 
      center: myLatlng, 
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var map = new google.maps.Map(document.getElementById("map"), mapOptions); 
     infowindow = new google.maps.InfoWindow(); 

     var service = new google.maps.places.PlacesService(map); 
     service.nearbySearch({ 
      location: myLatlng, 
      radius: 5000, 
      type: ['police'] 
     }, callback); 

     function callback(results, status) { 
      if (status === google.maps.places.PlacesServiceStatus.OK) { 
       for (var i = 0; i < results.length; i++) { 
        createMarker(results[i]); 
       } 
      } 
     } 

     function createMarker(place) { 
      geocoder = new google.maps.Geocoder(); 

      var latlng = new google.maps.LatLng(lat, long); 
      geocoder.geocode({'latLng': latlng}, function(results, status) { 
       var placeLoc = place.geometry.location; 
       var marker = new google.maps.Marker({ 
        map: map, 
        position: place.geometry.location 
       }); 
       var request = { reference: place.reference }; 

       service.getDetails(request, function(details, status) { 
        console.log(details); 

        var url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins="+results[0].formatted_address+"&destinations="+details.formatted_address+"&key=AIzaSyDDxMGpu5SP5XwZGrKw5BQWl_r2dgLgpPY"; 
        var distances = []; 

        $http.get(url).then(function(response){ 
         var str = response.data.rows[0].elements[0].distance.text; 

         distances = distances.concat(str); 

         console.log(distances); 
        }); 
       } 
      }); 
     } 
    } 
} 

КОД ОБНОВЛЕНО!

+0

Можете ли вы прокручивать массивы с помощью углового.forEach и нажимать каждый элемент на массив? –

+0

erm Как мне это сделать, вы можете показать мне пример? – user3711175

+0

@MarkS. после того, как я добавлю угловое значение. Прежде всего, это то же самое, что только один цикл один за другим нечетно. – user3711175

ответ

0

Я сильно подозреваю, distances массив инициализируется каждый раз, когда createMarker вызывается метод. Итак, поставьте свой distances в глобальном масштабе. т.е. чуть выше вашего разрешения getCurrentPosition.

var distances = []; 
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) { 
// your code 

и удалите дистанцию ​​из внутреннего кода.

+0

Приятно, что это удалось уже благодаря столько lolcoder, что вы человек бомбы – user3711175

+0

Рад помочь вам !!! –

0

Это то, что вам нужно! Массив вне вашей функции createMarker. Когда вы вызываете $http.get, вы должны объединить ответ с вашим массивом distances.

var distances = []; // HERE 

function createMarker(place) { 
    geocoder = new google.maps.Geocoder(); 

    var latlng = new google.maps.LatLng(lat, long); 
    geocoder.geocode({'latLng': latlng}, function(results, status) { 
     var placeLoc = place.geometry.location; 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: place.geometry.location 
     }); 
     var request = { reference: place.reference }; 

     service.getDetails(request, function(details, status) { 

      var url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins="+results[0].formatted_address+"&destinations="+details.formatted_address+"&key=AIzaSyDDxMGpu5SP5XwZGrKw5BQWl_r2dgLgpPY"; 

      $http.get(url).then(function(response){ 
       var str = response.data.rows[0].elements[0].distance.text; 

       distances = distances.concat(str); // HERE 
      }); 
     } 
    }); 
} 
+0

hi kevin все тот же, все еще возвращает тот же результат – user3711175

+0

Можете ли вы показать немного больше своего кода? В вашем фрагменте я вижу только один вызов '$ http.get'. –

+0

Juz обновил мой код, который вы можете проверить – user3711175