Я получил три конечных точки API, где api2 и api3 получили внешний ключ, соответствующий api1 id.
На данный момент это мой код, делая то, что я хочу (подключение объектов с соответствующим идентификатором в новый массив), но я хотел бы помочь получить его более чистым:
$scope.arr = function() {
$scope.cars = [];
$scope.information = [];
$scope.booking = [];
$scope.newArr = [];
$http({method: 'GET', url: '*api1*'}).success(function(data) {
angular.forEach(data, function(value, key) {
$scope.cars.push(value);
})
$http({method: 'GET', url: '*api2*'}).success(function(data){
angular.forEach(data, function(value, key) {
$scope.information.push(value);
})
for(var i = 0, car; car = $scope.cars[i]; i++) {
for(var j = 0, information; information = $scope.information[j]; j++) {
if(car.id === information.carId){
$scope.newArr.push({
"name" : car.name,
"city": information.city,
"mile": information.mile,
})
}
}
}
$http({method: 'GET', url: '*api3*'}).success(function(data){
angular.forEach(data, function(value, key) {
$scope.booking.push(value);
})
for(var i = 0, car; car = $scope.cars[i]; i++) {
for(var j = 0, booking; booking = $scope.booking[j]; j++) {
if(car.id === booking.carId){
$scope.newArr.push({
"book" : booking.isBookable,
})
}
}
}
})
})
})
}
$scope.arr();
Это похоже на беспорядок, но единственный способ, которым я преуспел. Есть ли другой подход, делающий это намного проще?
попробуйте это в последнем цикле
for (var i=0;i<$scope.newArr.length;i++) {
for (var j=0;j<$scope.booking.length;j++) {
if (newArr[i].id === $scope.booking[j].carId) {
$scope.newArr[i].id = $scope.booking[j].isBookable;
}
}
}