Javascript 如何为angular js合并两个对象数组?

Javascript 如何为angular js合并两个对象数组?,javascript,angularjs,Javascript,Angularjs,我正在尝试用角度js合并两个或多个对象数组。 var app = angular.module('bookingApp', ['ui.bootstrap']); app.filter('startFrom', function() { return function(input, start) { if(input) { start = +start; //parse to int return input.slice(st

我正在尝试用角度js合并两个或多个对象数组。

var app = angular.module('bookingApp', ['ui.bootstrap']);
app.filter('startFrom', function() {
    return function(input, start) {
        if(input) {
            start = +start; //parse to int
            return input.slice(start);
        }
        return [];
    }
});

app.controller('bookingCtrl', function ($scope, $http, $timeout) {
    $scope.init = function(){
       $http({
              method: 'get',
              url: 'http://mmres.baganthandehotel.net/mmresadmin/invoicejson.php',
              data: $.param({'search' : ''}),
              headers: { 'Content-Type': 'application/json; charset=utf-8'}
            })
        .success(function(data){
            var list1 = data;
            angular.isObject(list1);
            //console.log(list1);

        });
        $http({
              method: 'get',
              url: 'http://mmres.classique-inn.com/mmresadmin/invoicejson.php',
              data: $.param({'search' : ''}),
              headers: { 'Content-Type': 'application/json; charset=utf-8'}
            })
        .success(function(data){
            var list2 = data;
            //console.log(list2);

        });
        $scope.myConcatenatedData = list1.concat(list2);
        console.log(myConcatenatedData);
    }; 
});

我从两个控制器获得两个对象数组,分别为list1和list2。现在我想将list1和list2合并为一个数组。请帮助我找到此解决方案。

在第一个
$http
的成功处理程序中调用第二个
$http
请求

由于
ajax
本质上是异步的,在应用
.concat
时,这两个变量都是
未定义的

var-app=angular.module('bookingApp',['ui.bootstrap']);
app.filter('startFrom',function(){
返回功能(输入、启动){
如果(输入){
start=+start;//解析为int
返回input.slice(开始);
}
返回[];
}
});
app.controller('bookingCtrl',函数($scope,$http,$timeout){
$scope.init=函数(){
$http({
方法:“get”,
网址:'http://mmres.baganthandehotel.net/mmresadmin/invoicejson.php',
数据:$.param({
“搜索”:”
}),
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”
}
})
.成功(功能(数据1){
$http({
方法:“get”,
网址:'http://mmres.classique-inn.com/mmresadmin/invoicejson.php',
数据:$.param({
“搜索”:”
}),
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”
}
})
.成功(功能(数据2){
$scope.myConcatenatedData=data1.concat(data2);
console.log(myConcatenatedData);
});
});
};

});
在第一个
$http
的成功处理程序中调用第二个
$http
请求

由于
ajax
本质上是异步的,在应用
.concat
时,这两个变量都是
未定义的

var-app=angular.module('bookingApp',['ui.bootstrap']);
app.filter('startFrom',function(){
返回功能(输入、启动){
如果(输入){
start=+start;//解析为int
返回input.slice(开始);
}
返回[];
}
});
app.controller('bookingCtrl',函数($scope,$http,$timeout){
$scope.init=函数(){
$http({
方法:“get”,
网址:'http://mmres.baganthandehotel.net/mmresadmin/invoicejson.php',
数据:$.param({
“搜索”:”
}),
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”
}
})
.成功(功能(数据1){
$http({
方法:“get”,
网址:'http://mmres.classique-inn.com/mmresadmin/invoicejson.php',
数据:$.param({
“搜索”:”
}),
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”
}
})
.成功(功能(数据2){
$scope.myConcatenatedData=data1.concat(data2);
console.log(myConcatenatedData);
});
});
};

});等待两个HTTP请求完成,然后合并列表
$http
返回一个承诺,因此您可以使用
promise.all
(可能是
$q.all
,因为这是有角度的)来等待它们都完成。见评论:

app.controller('bookingCtrl', function ($scope, $http, $timeout) {
    $scope.init = function(){
        var list1, list2;                    // Declare them here
        Promise.all([                        // Wait for both requests to complete (perhaps this should be $q.all)
           $http({
                  method: 'get',
                  url: 'http://mmres.baganthandehotel.net/mmresadmin/invoicejson.php',
                  data: $.param({'search' : ''}),
                  headers: { 'Content-Type': 'application/json; charset=utf-8'}
                })
            .success(function(data){
                list1 = data;
            }),
            $http({
                  method: 'get',
                  url: 'http://mmres.classique-inn.com/mmresadmin/invoicejson.php',
                  data: $.param({'search' : ''}),
                  headers: { 'Content-Type': 'application/json; charset=utf-8'}
                })
            .success(function(data){
                list2 = data;
            })
        ]).then(function() {                 // Then concat the lists
            $scope.myConcatenatedData = list1.concat(list2);
        });
    }; 
});

等待两个HTTP请求完成,然后合并列表
$http
返回一个承诺,因此您可以使用
promise.all
(可能是
$q.all
,因为这是有角度的)来等待它们都完成。见评论:

app.controller('bookingCtrl', function ($scope, $http, $timeout) {
    $scope.init = function(){
        var list1, list2;                    // Declare them here
        Promise.all([                        // Wait for both requests to complete (perhaps this should be $q.all)
           $http({
                  method: 'get',
                  url: 'http://mmres.baganthandehotel.net/mmresadmin/invoicejson.php',
                  data: $.param({'search' : ''}),
                  headers: { 'Content-Type': 'application/json; charset=utf-8'}
                })
            .success(function(data){
                list1 = data;
            }),
            $http({
                  method: 'get',
                  url: 'http://mmres.classique-inn.com/mmresadmin/invoicejson.php',
                  data: $.param({'search' : ''}),
                  headers: { 'Content-Type': 'application/json; charset=utf-8'}
                })
            .success(function(data){
                list2 = data;
            })
        ]).then(function() {                 // Then concat the lists
            $scope.myConcatenatedData = list1.concat(list2);
        });
    }; 
});

控制台日志显示了什么?我猜它给出的是未定义的,所以您可能应该在第一个http请求成功时嵌套第二个http请求,在第二个http请求成功时嵌套concat,
console.log
显示了什么?我猜它给出的是未定义的,因此您可能应该将第二个http请求嵌套在第一个http请求的成功中,并将concat嵌套在第二个http请求的成功中,这当然是可行的,但是如果第二个请求不需要将第一个http请求的信息用作请求的一部分,则没有特别的理由延迟第二个请求;它们可以很容易地并行。@T.J.Crowder,我正要用
$q.all
编辑,但像往常一样,你得到了第一个:)“伟大的T.J.Crowder”哈哈,现在我要得到一个胖脑袋了。:-)@T.J.Crowder,你当然是:)这当然有效,但是如果第二个请求不需要使用第一个请求的信息作为请求的一部分,那么没有特别的理由延迟第二个请求;它们可以很容易地并行。@T.J.Crowder,我正要用
$q.all
编辑,但像往常一样,你得到了第一个:)“伟大的T.J.Crowder”哈哈,现在我要得到一个胖脑袋了。:-)@T.J.Crowder,你当然是:)你好,T.J.Crowder先生,合并两个数组是可以的。但是我想合并两个或多个数组。我如何才能合并两个以上的数组?@MrMyo:如果你特别问合并部分,我可能会做的是有一个结果数组(
result=[]
)然后是一系列的
push
调用:
result.push.apply(result,arr1);结果.推送.应用(结果,arr2);结果.推送.应用(结果,arr3)(可能在循环中)。(在ES2015中,这会更漂亮:
result.push(…arr1);result.push(…arr2);
)如果您询问一系列
$http
请求,请构建它们的返回值(它们的承诺)数组,然后将该数组交给
$q.all
(或
Promise.all
)。它将等待所有的数组。您好,T.J.Crowder先生,合并两个数组是可以的。但是我想合并两个或更多的数组。我如何尝试合并两个以上的数组?@MrMyo:如果您特别询问合并部分,我可能会做的是有一个结果数组(
result=[]
)然后是一系列的
push
调用:
result.push.apply(result,arr1);结果.推送.应用(结果,arr2);结果.推送.应用(结果,arr3)(可能在循环中)。(在ES2015中,这会更漂亮:
r