Angularjs 如何合并JSON数据中的两个不同对象
嗨,我需要一些关于这个代码片段的帮助。我得到的输出是JSON数据的多个不同对象。但是我想提取目标数据,然后将它们合并为一个数组。但是我得到的所有数据只是一个数据合并为一个数组,一个接一个。 以下是输出:Angularjs 如何合并JSON数据中的两个不同对象,angularjs,arrays,json,concatenation,Angularjs,Arrays,Json,Concatenation,嗨,我需要一些关于这个代码片段的帮助。我得到的输出是JSON数据的多个不同对象。但是我想提取目标数据,然后将它们合并为一个数组。但是我得到的所有数据只是一个数据合并为一个数组,一个接一个。 以下是输出: $scope.findHospital=function(){ $ionicLoading.show({ 模板:'正在获取位置!' }); var posOptions={ EnableHighAccurance:正确, 超时:20000, 最大值:0 }; $cordovaGeolocatio
$scope.findHospital=function(){
$ionicLoading.show({
模板:'
正在获取位置!'
});
var posOptions={
EnableHighAccurance:正确,
超时:20000,
最大值:0
};
$cordovaGeolocation.getCurrentPosition(posOptions)。然后(函数(position){
var lat=位置坐标纬度;
var long=位置坐标经度;
var信息窗口;
var mylatng=new google.maps.LatLng(lat,long);
变量映射选项={
中心:myLatlng,
缩放:16,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“map”)、mapOptions);
infowindow=new google.maps.infowindow();
var service=newgoogle.maps.places.PlacesService(地图);
服务,近距离搜索({
地点:myLatlng,
半径:5000,
类型:[“警察”]
},回调);
函数回调(结果、状态){
if(status==google.maps.places.PlacesServiceStatus.OK){
对于(var i=0;i
代码已更新!这是您所需要的!!在函数
createMarker
之外的数组。当您调用$http.get
时,您应该将响应与距离
数组连接起来
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
});
}
});
}
这就是你所需要的!!在你的函数
createMarker
之外的数组。当你调用$http.get
时,你应该将响应与你的数组连接起来
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
});
}
});
}
我强烈怀疑,distance
数组每次调用createMarker
方法时都在初始化。因此,请将您的distance
放在全局范围内。即,就在您的解析getCurrentPosition
承诺之上
var distances = [];
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
// your code
并从内部代码中删除距离初始化。我强烈怀疑,距离
数组每次调用createMarker
方法时都在初始化。因此,请将您的距离
放在全局范围内。也就是说,就在您的解析getCurrentPosition
承诺之上
var distances = [];
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
// your code
并从内部代码中删除距离初始化。你能用angular.forEach循环数组并将每个项目推到数组中吗?呃,我该怎么做?你能给我举个例子吗?@MarkS。在我添加angular.forEach后,它仍然是一样的,它只逐个循环一个数据,而不是所有的数据都在一起。每次我添加时,距离都在初始化我怀疑,你在某个循环中有上面的代码。但是我没有声明任何循环,我只是调用url,json数据会一个接一个地返回数据并初始化每次。你可以使用angular.forEach循环数组并将每个项推到数组上?呃,我该怎么做?你能给我举个例子吗?@MarkS。在我添加angular.forEach之后仍然是同样的,它只是一个接一个地循环一个数据,并不是所有的数据都在一起。距离每次都在初始化,正如我所怀疑的,上面的代码在某个循环中。但是我没有声明任何循环,我只是调用url,json数据一个接一个地返回数据并初始化每个数据。Hi kevin仍然是一样的,仍然返回相同的输出。你能再显示一点吗在你的代码片段中,我只看到一个对$http.get
的调用。很抱歉,我需要你的代码的更多信息。但是,基本上,你需要在函数外部声明距离
数组,其中是实际代码。我在函数外部声明它返回空。我kevin仍然是相同的,仍然是返回相同的输出你会显示更多的代码吗?在你的代码片段中,我只看到一个对$http.get
的调用。很抱歉,我需要你的代码的更多信息。但是,基本上,你需要在函数外部声明距离
数组,实际代码在哪里。我在外部声明它返回emptyNice它已经成功了,非常感谢你是炸弹手,它已经成功了,非常感谢你是炸弹手