Угловой, объединить три массива в один, где идентификатор совпадают

0

Я получил три конечных точки 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();

Это похоже на беспорядок, но единственный способ, которым я преуспел. Есть ли другой подход, делающий это намного проще?

  • 0
    Посмотрите сторонние библиотеки, я использую подчеркивание
  • 0
    Подчеркивание или lodash оба хороши (_.union (), _.intersection () и т. Д.)
Показать ещё 1 комментарий
Теги:
arrays
merge

1 ответ

0

попробуйте это в последнем цикле

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;
                    }
                }
            }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню