如何在angularjs中合并两个对象数组?

Muh*_*hab 27 javascript merge jquery append angularjs

我想在angulajs中追加跟随对象数组和现有的对象数组,以实现更多的加载功能.

即,每次附加现有的AJAX响应.

我有一个变量,$scope.actions其中包含以下JSON数据,

    {
    "total": 13,
    "per_page": 2,
    "current_page": 1,
    "last_page": 7,
    "next_page_url": "http://invoice.local/activities/?page=2",
    "prev_page_url": null,
    "from": 1,
    "to": 2,
    "data": [
        {
            "id": 2108,
            "action_type_id": 202,
            "user_id": 1
        },
        {
            "id": 2108,
            "action_type_id": 202,
            "user_id": 1
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想在JSON每次变量时追加以下响应.

    {
    "data": [
        {
            "id": 2108,
            "action_type_id": 202,
            "user_id": 1
        },
        {
            "id": 2108,
            "action_type_id": 202,
            "user_id": 1
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试过了 $scope.actions.data.concat(data.data);

但它无法正常工作并收到以下错误消息

$scope.actions.data.concat is not a function

Deb*_*ppe 39

您可以使用 angular.extend(dest, src1, src2,...);

在你的情况下,它将是:

angular.extend($scope.actions.data, data);
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档

https://docs.angularjs.org/api/ng/function/angular.extend

否则,如果只从服务器获取新值,则可以执行以下操作

for (var i=0; i<data.length; i++){
    $scope.actions.data.push(data[i]);
}
Run Code Online (Sandbox Code Playgroud)

  • `angular.extend($ scope.actions,data); 它正在取代不附加:( (3认同)
  • angular.extend()是一个浅层副本,在一般情况下会失败(任意复杂对象的数组).angular.merge()实现了深层复制,但在粗略测试期间也失败了......我选择了直接解决方案:src.forEach(function(x){dst.push(x);}); 将src合并到dst中. (3认同)

mbe*_*jda 27

这对我有用:

$scope.array1 = $scope.array1.concat(array2)
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它将是:

$scope.actions.data = $scope.actions.data.concat(data)
Run Code Online (Sandbox Code Playgroud)