angular.merge对关联数组(对象)无法正常工作

时间:2016-02-11 16:45:46

标签: javascript arrays angularjs

我有以下AngularJS代码,它通过后端HTTP请求从数据库中提取数据:

    // Get the list of functions and associated metrics
    $http.get("/BackEnd/Queries/GetFunctionListWithMetrics.php?BuildID=" + $scope.Build.ID + "&ClassID=" + $scope.Class.ID)
        .success(function (data, status, headers, config) {

            // Save the data
            //$scope.functionlist = data;
            angular.merge($scope.functionlist, data);

            // We've finished loading
            $scope.isLoading = false;
        })

"数据"是一个关联数组,其中键是一个数字(通常类似于" 718214")。

最初我的代码有" $ scope.functionlist = data;" (目前显示已注释掉),一切正常。然后我转而使用angular.merge行(因为我要触发几个不同的http请求,我希望结果全部合并到同一个$ scope.functionlist对象中)。

从功能的角度来看,这很好用。我的页面继续正确显示数据,我的多个HTTP请求可以收集数据并将它们合并在一起,而不需要任何计时和排序问题。

但由于某些原因,我的网页开始运行得很慢。控制台中没有显示错误。

最后我通过添加以下2行并比较functionlist和functionlist2的内容来解决问题所在:

$scope.functionlist2 = data;
angular.merge($scope.functionlist, data);

我意识到虽然functionlist2包含我的约10个键的关联数组,但函数列表版本包含一个718214元素的数组!!!

似乎angular.merge错误地将数据的数字键解释为数组索引。

我在角度文档或网络上都没有看到任何相关内容。

这是一个已知问题吗?还有另一种方法可以获得正确的结果(即没有700 + k数组元素)?

提前致谢。

修改

啊,Javascript不支持关联数组,只支持对象。嗯,我还是不确定如何实现我所需要的。

1 个答案:

答案 0 :(得分:0)

我最终解决了这个问题,实际上非常简单。

当然Javascript实际上并不支持关联数组,只是数字索引的数组和对象,所以我实际拥有的是一个对象。

所以最后我要做的就是初始化$ scope.functionlist,如下所示:

npm update

而不是像我一样(像数组一样):

$scope.functionlist = {};

现在一切都很完美。